@sprucelabs/spruce-cli 15.4.10 → 16.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +27 -0
- package/build/.spruce/errors/spruceCli/actionCancelled.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/bootError.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/buildFailed.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/cacheNotEnabled.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/commandAborted.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/commandBlocked.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/commandNotImplemented.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/createAutoloaderFailed.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/dependencyExists.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/deployFailed.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/directoryEmpty.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/directoryNotSkill.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/dockerNotStarted.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/executingCommandFailed.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/failedToImport.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/featureNotInstalled.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/fileExists.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/generic.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/invalidCommand.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/invalidEventContract.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/invalidFeatureCode.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/invalidTestDirectory.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/lintFailed.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/mercuryResponseError.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/missingDependencies.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/missingDependenciesDependency.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/noOrganizationsFound.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/noSkillsRegistered.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/notImplemented.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/notLoggedIn.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/schemaExists.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/schemaFailedToImport.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/schemaTemplateItemBuildingFailed.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/skillNotFound.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/skillNotRegistered.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/skillViewExists.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/storeExists.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/testFailed.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/themeExists.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/transportAlreadyExists.schema.js.map +1 -1
- package/build/.spruce/errors/spruceCli/vscodeNotInstalled.schema.js.map +1 -1
- package/build/.spruce/events/heartwood/didRegisterSkillViews.v2021_02_11.contract.js.map +1 -1
- package/build/.spruce/events/heartwood/generateUrl.v2021_02_11.contract.js.map +1 -1
- package/build/.spruce/events/heartwood/getSkillViews.v2021_02_11.contract.js.map +1 -1
- package/build/.spruce/events/heartwood/listViews.v2021_02_11.contract.js.map +1 -1
- package/build/.spruce/events/heartwood/registerSkillViews.v2021_02_11.contract.js.map +1 -1
- package/build/.spruce/schemas/heartwood/v2021_02_11/didRegisterSkillViewsEmitPayload.schema.js.map +1 -1
- package/build/.spruce/schemas/heartwood/v2021_02_11/didRegisterSkillViewsEmitTarget.schema.js.map +1 -1
- package/build/.spruce/schemas/heartwood/v2021_02_11/didRegisterSkillViewsEmitTargetAndPayload.schema.js.map +1 -1
- package/build/.spruce/schemas/heartwood/v2021_02_11/generateUrlEmitPayload.schema.js.map +1 -1
- package/build/.spruce/schemas/heartwood/v2021_02_11/generateUrlEmitTarget.schema.js.map +1 -1
- package/build/.spruce/schemas/heartwood/v2021_02_11/generateUrlEmitTargetAndPayload.schema.js.map +1 -1
- package/build/.spruce/schemas/heartwood/v2021_02_11/generateUrlResponsePayload.schema.js.map +1 -1
- package/build/.spruce/schemas/heartwood/v2021_02_11/getSkillViewsEmitTargetAndPayload.schema.js.map +1 -1
- package/build/.spruce/schemas/heartwood/v2021_02_11/getSkillViewsResponsePayload.schema.js.map +1 -1
- package/build/.spruce/schemas/heartwood/v2021_02_11/getViewControllersEmitTarget.schema.js.map +1 -1
- package/build/.spruce/schemas/heartwood/v2021_02_11/listViewsResponsePayload.schema.js.map +1 -1
- package/build/.spruce/schemas/heartwood/v2021_02_11/listViewsResult.schema.js.map +1 -1
- package/build/.spruce/schemas/heartwood/v2021_02_11/registerSkillViewsEmitPayload.schema.js.map +1 -1
- package/build/.spruce/schemas/heartwood/v2021_02_11/registerSkillViewsEmitTargetAndPayload.schema.js.map +1 -1
- package/build/.spruce/schemas/heartwood/v2021_02_11/registerSkillViewsResponsePayload.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/bootSkillOptions.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/createConversationTopicOptions.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/createErrorOptions.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/createOrganizationOptions.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/createSchemaOptions.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/createTestOptions.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/generatedDir.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/generatedFile.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/installSkillAtOrganizationOptions.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/listenEventOptions.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/namedTemplateItem.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/nodeFeatureOptions.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/onboardOptions.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/onboarding.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/personWithToken.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/registerDashboardWidgetsEmitPayloadSchema.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/setupTestsOptions.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/setupVscodeOptions.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/skillFeature.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/syncErrorOptions.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/syncEventOptions.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/syncSchemaFieldsOptions.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/syncSchemasOptions.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/testOptions.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/upgradeSkillOptions.schema.js.map +1 -1
- package/build/.spruce/schemas/spruceCli/v2020_07_22/watcherDidDetectChangesEmitPayload.schema.js.map +1 -1
- package/build/GlobalEmitter.js.map +1 -1
- package/build/__tests__/behavioral/AddingADependency.test.js.map +1 -1
- package/build/__tests__/behavioral/BlockingCommands.test.js.map +1 -1
- package/build/__tests__/behavioral/BootingTheCli.test.js.map +1 -1
- package/build/__tests__/behavioral/BootingWithBadFiles.test.js.map +1 -1
- package/build/__tests__/behavioral/CreatingAConversationTopic.test.js.map +1 -1
- package/build/__tests__/behavioral/CreatingSchemasWithGenerics.test.js.map +1 -1
- package/build/__tests__/behavioral/DeployingASkill.test.js.map +1 -1
- package/build/__tests__/behavioral/DeployingToSandbox.test.js.map +1 -1
- package/build/__tests__/behavioral/EnablingAndDisablingCache.test.js.map +1 -1
- package/build/__tests__/behavioral/GettingCliVersion.test.js.map +1 -1
- package/build/__tests__/behavioral/InstallingASkillAtAnOrg.test.js.map +1 -1
- package/build/__tests__/behavioral/ListeningToCoreEvents.test.js.map +1 -1
- package/build/__tests__/behavioral/LoggingInAsASkill.test.js.map +1 -1
- package/build/__tests__/behavioral/ManagingDependencies.test.js.map +1 -1
- package/build/__tests__/behavioral/OverridingCommandsInPackageJson.test.js.map +1 -1
- package/build/__tests__/behavioral/RebuildingASkill.test.js.map +1 -1
- package/build/__tests__/behavioral/RegisteringConversationsOnBoot.test.js.map +1 -1
- package/build/__tests__/behavioral/RegisteringEventsOnBoot.test.js.map +1 -1
- package/build/__tests__/behavioral/RegisteringGlobalEvents.test.js.map +1 -1
- package/build/__tests__/behavioral/RegisteringSkillViewOnBoot.test.js.map +1 -1
- package/build/__tests__/behavioral/RememberingUpgradeSelections.test.js.map +1 -1
- package/build/__tests__/behavioral/SettingLogTransportsInASkill.test.js.map +1 -1
- package/build/__tests__/behavioral/SettingRemote.test.js.map +1 -1
- package/build/__tests__/behavioral/SettingUpASkillForTesting.test.js.map +1 -1
- package/build/__tests__/behavioral/SettingUpSchemasForModuleDistribution.test.js.map +1 -1
- package/build/__tests__/behavioral/SettingUpVscode.test.js.map +1 -1
- package/build/__tests__/behavioral/SyncingEventsOnlyFromDependencies.test.js.map +1 -1
- package/build/__tests__/behavioral/TestReporterSettingsRemembered.test.js.map +1 -1
- package/build/__tests__/behavioral/TestingAConversation.test.js.map +1 -1
- package/build/__tests__/behavioral/TestingDataStores.test.js.map +1 -1
- package/build/__tests__/behavioral/WatchingSkillViews.test.js.map +1 -1
- package/build/__tests__/behavioral/errors/CreatingANewErrorBuilder.test.js.map +1 -1
- package/build/__tests__/behavioral/errors/KeepingErrorClassInSync.test.js.map +1 -1
- package/build/__tests__/behavioral/errors/KeepingErrorsInSync.test.js.map +1 -1
- package/build/__tests__/behavioral/errors/SettingUpErrors.test.js.map +1 -1
- package/build/__tests__/behavioral/eventContract/PullingMercuryEventContract.test.js.map +1 -1
- package/build/__tests__/behavioral/events/CreatingAListener.test.js.map +1 -1
- package/build/__tests__/behavioral/events/CreatingAnEvent.test.js.map +1 -1
- package/build/__tests__/behavioral/events/KeepingEventsInSync.test.js.map +1 -1
- package/build/__tests__/behavioral/events/KeepingEventsInSync2.test.js.map +1 -1
- package/build/__tests__/behavioral/events/KeepingListenersInSync.test.js.map +1 -1
- package/build/__tests__/behavioral/events/ListeningToAnEventYouCreate.test.js.map +1 -1
- package/build/__tests__/behavioral/events/SettingUpEvents.test.js.map +1 -1
- package/build/__tests__/behavioral/events/SkillEmitsBootEvents.test.js.map +1 -1
- package/build/__tests__/behavioral/node/CreatingANodeModule.test.js.map +1 -1
- package/build/__tests__/behavioral/onboard/StartingOnboarding.test.js.map +1 -1
- package/build/__tests__/behavioral/organization/CreatingAnOrg.test.js.map +1 -1
- package/build/__tests__/behavioral/person/LoggingInAsPerson.test.js.map +1 -1
- package/build/__tests__/behavioral/person/SeeWhoIsLoggedIn.test.js.map +1 -1
- package/build/__tests__/behavioral/schemas/CreatingANewSchemaBuilder.test.js.map +1 -1
- package/build/__tests__/behavioral/schemas/GeneratingFieldTypesOnly.test.js.map +1 -1
- package/build/__tests__/behavioral/schemas/GettingSchemasFromHealthCheck.test.js.map +1 -1
- package/build/__tests__/behavioral/schemas/HandlesRelatedSchemas.test.js.map +1 -1
- package/build/__tests__/behavioral/schemas/ImportingSchemaImports.test.js.map +1 -1
- package/build/__tests__/behavioral/schemas/KeepingSchemasInSync.test.js.map +1 -1
- package/build/__tests__/behavioral/schemas/SettingUpSchemas.test.js.map +1 -1
- package/build/__tests__/behavioral/schemas/SyncingBadSchemasProvidesHelpfulErrorMessages.test.js.map +1 -1
- package/build/__tests__/behavioral/schemas/UsingSchemasInCli.test.js.map +1 -1
- package/build/__tests__/behavioral/skill/BootingASkill.test.js.map +1 -1
- package/build/__tests__/behavioral/skill/CreatingASkill.test.js.map +1 -1
- package/build/__tests__/behavioral/skill/RegisteringASkill.test.js.map +1 -1
- package/build/__tests__/behavioral/skill/SettingUpASkill.test.js.map +1 -1
- package/build/__tests__/behavioral/stores/CreatingADataStore.test.js.map +1 -1
- package/build/__tests__/behavioral/stores/KeepingDataStoresInSync.test.js.map +1 -1
- package/build/__tests__/behavioral/tests/CreatingATest.test.js +3 -3
- package/build/__tests__/behavioral/tests/CreatingATest.test.js.map +1 -1
- package/build/__tests__/behavioral/tests/RunningTests.test.js.map +1 -1
- package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.js.map +1 -1
- package/build/__tests__/behavioral/tests/SettingUpTests.test.js.map +1 -1
- package/build/__tests__/behavioral/upgrading/UpdatingDependencies.test.js.map +1 -1
- package/build/__tests__/behavioral/upgrading/UpdatingDependencies2.test.js.map +1 -1
- package/build/__tests__/behavioral/upgrading/UpgradingANodeModule.test.js.map +1 -1
- package/build/__tests__/behavioral/upgrading/UpgradingASkill.test.js.map +1 -1
- package/build/__tests__/behavioral/upgrading/UpgradingASkill2.test.js.map +1 -1
- package/build/__tests__/behavioral/upgrading/UpgradingASkill3.test.js.map +1 -1
- package/build/__tests__/behavioral/upgrading/UpgradingASkill4.test.js.map +1 -1
- package/build/__tests__/behavioral/upgrading/UpgradingASkill5.test.js.map +1 -1
- package/build/__tests__/behavioral/upgrading/UpgradingWithListeners.test.js.map +1 -1
- package/build/__tests__/behavioral/upgrading/UpgradingWithSandboxFeatureInstalled.test.js.map +1 -1
- package/build/__tests__/behavioral/views/CreatingASkillView.test.js +1 -1
- package/build/__tests__/behavioral/views/CreatingASkillView.test.js.map +1 -1
- package/build/__tests__/behavioral/views/CreatingATheme.test.js.map +1 -1
- package/build/__tests__/behavioral/views/KeepingViewsInSync.test.js.map +1 -1
- package/build/__tests__/behavioral/views/SettingUpViews.test.js.map +1 -1
- package/build/__tests__/behavioral/views/TestingViewControllers.test.js.map +1 -1
- package/build/__tests__/behavioral/watchers/WatchingForChanges.test.js.map +1 -1
- package/build/__tests__/implementation/ActionExecuter.test.js.map +1 -1
- package/build/__tests__/implementation/ActionExecuter2.test.js.map +1 -1
- package/build/__tests__/implementation/ActionExecuter3.test.js.map +1 -1
- package/build/__tests__/implementation/ActionExecuter4.test.js.map +1 -1
- package/build/__tests__/implementation/ArgParser.test.js.map +1 -1
- package/build/__tests__/implementation/BuildService.test.js.map +1 -1
- package/build/__tests__/implementation/BulkImporting.test.js.map +1 -1
- package/build/__tests__/implementation/CachingImports.test.js.map +1 -1
- package/build/__tests__/implementation/CommandOptionBuilder.test.js.map +1 -1
- package/build/__tests__/implementation/CommanderCommandResultMapper.test.js.map +1 -1
- package/build/__tests__/implementation/DataStoreStore.test.js.map +1 -1
- package/build/__tests__/implementation/DeletingOrphanedSchemaDefinitions.test.js.map +1 -1
- package/build/__tests__/implementation/EventContractCleanerUtil.test.js.map +1 -1
- package/build/__tests__/implementation/EventStore.test.js.map +1 -1
- package/build/__tests__/implementation/EventTemplateItemBuilder.test.js.map +1 -1
- package/build/__tests__/implementation/FeatureCommandAttacher.test.js.map +1 -1
- package/build/__tests__/implementation/FeatureFixture.test.js.map +1 -1
- package/build/__tests__/implementation/FeatureInstaller.test.js.map +1 -1
- package/build/__tests__/implementation/FeaturesUtil.test.js.map +1 -1
- package/build/__tests__/implementation/FieldTemplateItemBuilder.test.js.map +1 -1
- package/build/__tests__/implementation/GlobalEmitter.js.map +1 -1
- package/build/__tests__/implementation/Introspection.test.js.map +1 -1
- package/build/__tests__/implementation/JestJsonParser.test.js.map +1 -1
- package/build/__tests__/implementation/LintService.test.js.map +1 -1
- package/build/__tests__/implementation/ListenerStore.test.js.map +1 -1
- package/build/__tests__/implementation/OnboardingScriptLoader.test.js.map +1 -1
- package/build/__tests__/implementation/OnboardingScriptPlayer.test.js.map +1 -1
- package/build/__tests__/implementation/OnboardingStore.test.js.map +1 -1
- package/build/__tests__/implementation/OrganizationStore.test.js.map +1 -1
- package/build/__tests__/implementation/ParentTestFinder.test.js.map +1 -1
- package/build/__tests__/implementation/PkgService.test.js.map +1 -1
- package/build/__tests__/implementation/SchemaStore.test.js.map +1 -1
- package/build/__tests__/implementation/SchemaTemplateItemBuilder.test.js.map +1 -1
- package/build/__tests__/implementation/SchemaValueTypeWriter.test.js.map +1 -1
- package/build/__tests__/implementation/ServiceFactory.test.js.map +1 -1
- package/build/__tests__/implementation/SettingUpANodeModule.test.js.map +1 -1
- package/build/__tests__/implementation/SkillStore.test.js.map +1 -1
- package/build/__tests__/implementation/StoreFeature.test.js.map +1 -1
- package/build/__tests__/implementation/TestReporter.test.js.map +1 -1
- package/build/__tests__/implementation/TestRunner.test.js.map +1 -1
- package/build/__tests__/implementation/ValueTypeMapping.test.js.map +1 -1
- package/build/__tests__/implementation/Widgets.test.js.map +1 -1
- package/build/__tests__/support/scripts/first.script.js.map +1 -1
- package/build/addons/filePrompt.addon.js.map +1 -1
- package/build/cli.js.map +1 -1
- package/build/components/FormComponent.js.map +1 -1
- package/build/components/QuizComponent.js.map +1 -1
- package/build/errors/SpruceError.js.map +1 -1
- package/build/errors/actionCancelled.builder.js.map +1 -1
- package/build/errors/bootError.builder.js.map +1 -1
- package/build/errors/buildFailed.builder.js.map +1 -1
- package/build/errors/cacheNotEnabled.builder.js.map +1 -1
- package/build/errors/commandAborted.builder.js.map +1 -1
- package/build/errors/commandBlocked.builder.js.map +1 -1
- package/build/errors/commandNotImplemented.builder.js.map +1 -1
- package/build/errors/createAutoloaderFailed.builder.js.map +1 -1
- package/build/errors/dependencyExists.builder.js.map +1 -1
- package/build/errors/deployFailed.builder.js.map +1 -1
- package/build/errors/directoryEmpty.builder.js.map +1 -1
- package/build/errors/directoryNotSkill.builder.js.map +1 -1
- package/build/errors/dockerNotStarted.builder.js.map +1 -1
- package/build/errors/executingCommandFailed.builder.js.map +1 -1
- package/build/errors/failedToImport.builder.js.map +1 -1
- package/build/errors/featureNotInstalled.builder.js.map +1 -1
- package/build/errors/fileExists.builder.js.map +1 -1
- package/build/errors/generic.builder.js.map +1 -1
- package/build/errors/invalidCommand.builder.js.map +1 -1
- package/build/errors/invalidEventContract.builder.js.map +1 -1
- package/build/errors/invalidFeatureCode.builder.js.map +1 -1
- package/build/errors/invalidTestDirectory.builder.js.map +1 -1
- package/build/errors/lintFailed.builder.js.map +1 -1
- package/build/errors/mercuryResponseError.builder.js.map +1 -1
- package/build/errors/missingDependencies.builder.js.map +1 -1
- package/build/errors/noOrganizationsFound.builder.js.map +1 -1
- package/build/errors/noSkillsRegistered.builder.js.map +1 -1
- package/build/errors/notImplemented.builder.js.map +1 -1
- package/build/errors/notLoggedIn.builder.js.map +1 -1
- package/build/errors/schemaExists.builder.js.map +1 -1
- package/build/errors/schemaFailedToImport.builder.js.map +1 -1
- package/build/errors/schemaTemplateItemBuildingFailed.builder.js.map +1 -1
- package/build/errors/skillNotFound.builder.js.map +1 -1
- package/build/errors/skillNotRegistered.builder.js.map +1 -1
- package/build/errors/skillViewExists.builder.js.map +1 -1
- package/build/errors/storeExists.builder.js.map +1 -1
- package/build/errors/testFailed.builder.js.map +1 -1
- package/build/errors/themeExists.builder.js.map +1 -1
- package/build/errors/transportAlreadyExists.builder.js.map +1 -1
- package/build/errors/vscodeNotInstalled.builder.js.map +1 -1
- package/build/features/AbstractAction.js.map +1 -1
- package/build/features/AbstractFeature.js.map +1 -1
- package/build/features/ActionExecuter.js.map +1 -1
- package/build/features/ActionFactory.js.map +1 -1
- package/build/features/ActionQuestionAsker.js.map +1 -1
- package/build/features/FeatureCommandAttacher.js.map +1 -1
- package/build/features/FeatureInstaller.js.map +1 -1
- package/build/features/OverrideActionDecorator.js.map +1 -1
- package/build/features/cache/CacheFeature.js.map +1 -1
- package/build/features/cache/actions/DisableAction.js.map +1 -1
- package/build/features/cache/actions/EnableAction.js.map +1 -1
- package/build/features/conversation/ConversationFeature.js.map +1 -1
- package/build/features/conversation/actions/TestAction.js.map +1 -1
- package/build/features/conversation/stores/ConversationStore.js.map +1 -1
- package/build/features/conversation/writers/ConversationWriter.js.map +1 -1
- package/build/features/dependencies/DependencyFeature.js.map +1 -1
- package/build/features/dependencies/actions/AddAction.js.map +1 -1
- package/build/features/dependencies/actions/ManageAction.js.map +1 -1
- package/build/features/deploy/DeployFeature.js.map +1 -1
- package/build/features/deploy/actions/HerokuAction.js.map +1 -1
- package/build/features/deploy/writers/DeployWriter.js.map +1 -1
- package/build/features/error/ErrorFeature.js.map +1 -1
- package/build/features/error/ParentTestFinder.js.map +1 -1
- package/build/features/error/actions/CreateAction.js.map +1 -1
- package/build/features/error/actions/SyncAction.js.map +1 -1
- package/build/features/error/writers/ErrorWriter.js.map +1 -1
- package/build/features/event/EventFeature.js.map +1 -1
- package/build/features/event/actions/CreateAction.js.map +1 -1
- package/build/features/event/actions/ListenAction.js.map +1 -1
- package/build/features/event/actions/SetRemoteAction.js.map +1 -1
- package/build/features/event/actions/SyncAction.js.map +1 -1
- package/build/features/event/actions/SyncListenersAction.js.map +1 -1
- package/build/features/event/builders/EventContractBuilder.js.map +1 -1
- package/build/features/event/builders/ListenerTemplateItemBuilder.js.map +1 -1
- package/build/features/event/stores/EventStore.js.map +1 -1
- package/build/features/event/stores/ListenerStore.js.map +1 -1
- package/build/features/event/writers/EventWriter.js.map +1 -1
- package/build/features/eventContract/EventContractFeature.js.map +1 -1
- package/build/features/eventContract/actions/PullAction.js.map +1 -1
- package/build/features/feature.utilities.js.map +1 -1
- package/build/features/features.types.js.map +1 -1
- package/build/features/log/LogFeature.js.map +1 -1
- package/build/features/log/actions/CreateTransportAction.js.map +1 -1
- package/build/features/log/writers/LogWriter.js.map +1 -1
- package/build/features/node/NodeFeature.js.map +1 -1
- package/build/features/node/actions/UpdateDependenciesAction.js.map +1 -1
- package/build/features/node/actions/UpgradeAction.js.map +1 -1
- package/build/features/node/writers/NodeWriter.js.map +1 -1
- package/build/features/onboard/OnboardFeature.js.map +1 -1
- package/build/features/onboard/ScriptLoader.js.map +1 -1
- package/build/features/onboard/scripts/onboarding.first.script.js.map +1 -1
- package/build/features/onboard/scripts/onboarding.immersive.script.js.map +1 -1
- package/build/features/onboard/scripts/onboarding.returning.script.js.map +1 -1
- package/build/features/onboard/scripts/onboarding.short.script.js.map +1 -1
- package/build/features/onboard/scripts/wrongCommand.script.js.map +1 -1
- package/build/features/onboard/stores/OnboardingStore.js.map +1 -1
- package/build/features/organization/OrganizationFeature.js.map +1 -1
- package/build/features/organization/stores/OrganizationStore.js.map +1 -1
- package/build/features/person/PersonFeature.js.map +1 -1
- package/build/features/person/actions/LoginAction.js.map +1 -1
- package/build/features/person/actions/LogoutAction.js.map +1 -1
- package/build/features/person/actions/WhoamiAction.js.map +1 -1
- package/build/features/sandbox/SandboxFeature.js.map +1 -1
- package/build/features/sandbox/actions/SetupAction.js.map +1 -1
- package/build/features/sandbox/writers/SandboxWriter.js.map +1 -1
- package/build/features/schema/SchemaFeature.js.map +1 -1
- package/build/features/schema/ValueTypeBuilder.js.map +1 -1
- package/build/features/schema/actions/CreateAction.js.map +1 -1
- package/build/features/schema/actions/SyncAction.js.map +1 -1
- package/build/features/schema/actions/SyncFieldsAction.js.map +1 -1
- package/build/features/schema/services/SchemaService.js.map +1 -1
- package/build/features/schema/stores/SchemaStore.d.ts +2 -1
- package/build/features/schema/stores/SchemaStore.js +2 -1
- package/build/features/schema/stores/SchemaStore.js.map +1 -1
- package/build/features/schema/utilities/schema.utility.js.map +1 -1
- package/build/features/schema/utilities/schemaDisk.utility.js.map +1 -1
- package/build/features/schema/utilities/schemaGenerator.utility.js.map +1 -1
- package/build/features/schema/writers/SchemaWriter.js.map +1 -1
- package/build/features/skill/SkillFeature.js.map +1 -1
- package/build/features/skill/actions/BootAction.js.map +1 -1
- package/build/features/skill/actions/CreateAction.js.map +1 -1
- package/build/features/skill/actions/DashboardAction.js.map +1 -1
- package/build/features/skill/actions/LoginAction.js.map +1 -1
- package/build/features/skill/actions/RebuildAction.js.map +1 -1
- package/build/features/skill/actions/RegisterAction.js.map +1 -1
- package/build/features/skill/stores/SkillStore.js.map +1 -1
- package/build/features/skill/updaters/Updater.js.map +1 -1
- package/build/features/skill/writers/SkillWriter.js.map +1 -1
- package/build/features/store/StoreFeature.js.map +1 -1
- package/build/features/store/actions/CreateAction.js.map +1 -1
- package/build/features/store/actions/SyncAction.js.map +1 -1
- package/build/features/store/stores/StoreStore.js.map +1 -1
- package/build/features/store/templateItemBuilders/StoreTemplateItemBuilder.js.map +1 -1
- package/build/features/store/writers/StoreWriter.js.map +1 -1
- package/build/features/test/TestFeature.js.map +1 -1
- package/build/features/test/TestLogItemGenerator.js.map +1 -1
- package/build/features/test/TestReporter.js.map +1 -1
- package/build/features/test/TestRunner.js.map +1 -1
- package/build/features/test/actions/CreateAction.js.map +1 -1
- package/build/features/test/actions/SetupAction.js.map +1 -1
- package/build/features/test/actions/TestAction.js.map +1 -1
- package/build/features/test/writers/TestWriter.js.map +1 -1
- package/build/features/validateAndNormalize.utility.js.map +1 -1
- package/build/features/view/ViewFeature.js.map +1 -1
- package/build/features/view/actions/CreateAction.js.map +1 -1
- package/build/features/view/actions/CreateThemeAction.js.map +1 -1
- package/build/features/view/actions/SyncAction.js.map +1 -1
- package/build/features/view/actions/WatchAction.js.map +1 -1
- package/build/features/view/stores/ViewStore.js.map +1 -1
- package/build/features/view/writers/ViewWriter.js.map +1 -1
- package/build/features/vscode/VsCodeFeature.js.map +1 -1
- package/build/features/vscode/services/VsCodeService.js.map +1 -1
- package/build/features/vscode/writers/VsCodeWriter.js.map +1 -1
- package/build/features/watch/WatchFeature.js.map +1 -1
- package/build/index.js.map +1 -1
- package/build/interfaces/SpyInterface.js +0 -1
- package/build/interfaces/SpyInterface.js.map +1 -1
- package/build/interfaces/TerminalInterface.js.map +1 -1
- package/build/schemas/v2020_07_22/bootSkillOptions.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/createConversationTopicOptions.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/createErrorOptions.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/createOrganizationOptions.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/createSchemaOptions.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/createTestOptions.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/installSkillAtOrganizationOptions.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/listenEventOptions.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/namedTemplateItem.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/nodeFeatureOptions.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/onboardOptions.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/onboarding.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/personWithToken.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/registerDashboardWidgetsEmitPayloadSchema.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/setupTestsOptions.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/setupVscodeOptions.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/skillFeature.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/syncErrorOptions.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/syncEventOptions.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/syncSchemaFieldsOptions.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/syncSchemasOptions.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/testOptions.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/upgradeSkillOptions.builder.js.map +1 -1
- package/build/schemas/v2020_07_22/watcherDidDetectChangesEmitPayload.builder.js.map +1 -1
- package/build/services/CommandService.js.map +1 -1
- package/build/services/GameService.js.map +1 -1
- package/build/services/ImportService.js.map +1 -1
- package/build/services/LintService.js.map +1 -1
- package/build/services/PkgService.js.map +1 -1
- package/build/services/ServiceFactory.js.map +1 -1
- package/build/templateItemBuilders/EventTemplateItemBuilder.js.map +1 -1
- package/build/templateItemBuilders/FieldTemplateItemBuilder.js.map +1 -1
- package/build/templateItemBuilders/SchemaTemplateItemBuilder.js.map +1 -1
- package/build/tests/AbstractCliTest.js.map +1 -1
- package/build/tests/AbstractEventTest.js.map +1 -1
- package/build/tests/AbstractSchemaTest.js.map +1 -1
- package/build/tests/AbstractTestTest.js.map +1 -1
- package/build/tests/CommandFaker.js.map +1 -1
- package/build/tests/JestJsonParser.js.map +1 -1
- package/build/tests/buildTestCache.js.map +1 -1
- package/build/tests/cleanTestCache.js.map +1 -1
- package/build/tests/cleanTestData.js.map +1 -1
- package/build/tests/fixtures/FeatureFixture.js.map +1 -1
- package/build/tests/fixtures/MercuryFixture.js.map +1 -1
- package/build/tests/fixtures/PersonFixture.js.map +1 -1
- package/build/tests/fixtures/SkillFixture.js.map +1 -1
- package/build/tests/utilities/test.utility.js.map +1 -1
- package/build/tests/utilities/uiAssert.utility.js.map +1 -1
- package/build/utilities/action.utility.js.map +1 -1
- package/build/utilities/commander.utility.js.map +1 -1
- package/build/utilities/eventContractCleaner.utility.js.map +1 -1
- package/build/utilities/form.utility.js.map +1 -1
- package/build/utilities/introspection.utility.js.map +1 -1
- package/build/utilities/tsConfig.utility.js.map +1 -1
- package/build/widgets/Theme.js.map +1 -1
- package/build/widgets/WidgetFactory.js.map +1 -1
- package/build/widgets/terminalKit/TKButtonWidget.js.map +1 -1
- package/build/widgets/terminalKit/TkInputWidget.js.map +1 -1
- package/build/widgets/terminalKit/TkLayoutWidget.js.map +1 -1
- package/build/widgets/terminalKit/TkMenuBarWidget.js.map +1 -1
- package/build/widgets/terminalKit/TkPopupWidget.js.map +1 -1
- package/build/widgets/terminalKit/TkTextWidget.js.map +1 -1
- package/build/widgets/terminalKit/termKit.utility.js.map +1 -1
- package/build/widgets/types/input.types.js.map +1 -1
- package/build/widgets/types/menuBar.types.js.map +1 -1
- package/build/widgets/types/text.types.js.map +1 -1
- package/build/widgets/types/window.types.js.map +1 -1
- package/build/writers/AbstractWriter.js.map +1 -1
- package/package.json +35 -35
- package/src/__tests__/behavioral/views/CreatingASkillView.test.ts +3 -2
- package/src/features/schema/stores/SchemaStore.ts +4 -2
- package/build/.spruce/schemas/spruce/v2020_07_22/fullMessageChoices.schema.d.ts +0 -1
- package/build/.spruce/schemas/spruce/v2020_07_22/fullMessageChoices.schema.js +0 -14
- package/build/.spruce/schemas/spruce/v2020_07_22/fullMessageChoices.schema.js.map +0 -1
- package/src/.spruce/schemas/spruce/v2020_07_22/fullMessageChoices.schema.ts +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureInstaller.js","names":["FeatureInstaller","cwd","serviceFactory","code","feature","getFeature","isInstalled","Service","isMarkedAsInstalled","isMarkedAsSkipped","featuresMarkedAsSkippedThisRun","push","markAsPermanentlySkipped","indexOf","isMarkedAsPermanentlySkipped","featureMap","SpruceError","featureCode","codes","Promise","all","map","f","results","i","length","result","trackedFeatures","deps","getFeatureDependenciesIncludingSelf","isRequired","filter","sortFeatures","featureDependency","features","isDependencyInTracker","dependencies","dependency","x","dependencyDependencies","find","options","installFeatureDependencies","didUpdateHandler","shouldAllowEntertainment","startInFlightIntertainmentHandler","handler","pendingFeatureInstalls","dependenciesToInstall","concat","isInstalledOrPendingInstall","installOptions","installFeature","installResults","installAllPending","pendingResults","stopInFlightIntertainmentHandler","optionsSchema","beforePackageInstall","beforeInstallResults","queueInstallPackageDependenciesWithoutEntertainment","packagesInstalled","afterPackageInstalls","featuresToMarkAsInstalled","files","undefined","installPackageDependenciesForFeatures","pkgService","packagesToInstall","install","devPackagesToInstall","isDev","settings","markAsInstalled","afterPackageInstall","afterInstallResults","packageDependencies","forEach","pkg","packageName","buildPackageName","name","getFeatureNameAndDesc","nameReadable","description","featureDependencies","sort","a","b","aFeature","bFeature","aDependsOnB","d","bDependsOnA","installOrderWeight","type","Object","keys","dep","getAllCodes","installed"],"sources":["../../src/features/FeatureInstaller.ts"],"sourcesContent":["import { validateSchemaValues } from '@sprucelabs/schema'\nimport { uniq } from 'lodash'\nimport merge from 'lodash/merge'\nimport SpruceError from '../errors/SpruceError'\nimport ServiceFactory, {\n\tService,\n\tServiceProvider,\n\tServiceMap,\n} from '../services/ServiceFactory'\nimport { InternalUpdateHandler, NpmPackage } from '../types/cli.types'\nimport AbstractFeature, { FeatureDependency } from './AbstractFeature'\nimport {\n\tInstallFeatureOptions,\n\tFeatureInstallResponse,\n\tFeatureCode,\n\tInstallFeature,\n\tFeatureMap,\n} from './features.types'\n\nexport default class FeatureInstaller implements ServiceProvider {\n\tpublic cwd: string\n\n\tprivate featureMap: Partial<FeatureMap> = {}\n\tprivate serviceFactory: ServiceFactory\n\tprivate featuresMarkedAsSkippedThisRun: FeatureCode[] = []\n\tpublic static startInFlightIntertainmentHandler?: (\n\t\tdidUpdateHandler: (handler: (message: string) => void) => void\n\t) => void\n\tpublic static stopInFlightIntertainmentHandler?: () => void\n\tprivate packagesToInstall: string[] = []\n\tprivate devPackagesToInstall: string[] = []\n\tprivate featuresToMarkAsInstalled: string[] = []\n\tprivate afterPackageInstalls: InstallFeature[] = []\n\tprivate pendingFeatureInstalls: Record<string, boolean> = {}\n\n\tpublic constructor(cwd: string, serviceFactory: ServiceFactory) {\n\t\tthis.cwd = cwd\n\t\tthis.serviceFactory = serviceFactory\n\t}\n\n\tpublic async isInstalled(code: FeatureCode): Promise<boolean> {\n\t\tconst feature = this.getFeature(code)\n\n\t\tif (feature.isInstalled) {\n\t\t\treturn feature.isInstalled()\n\t\t}\n\n\t\treturn this.Service('settings').isMarkedAsInstalled(code)\n\t}\n\n\tpublic markAsSkippedThisRun(code: FeatureCode) {\n\t\tif (!this.isMarkedAsSkipped(code)) {\n\t\t\tthis.featuresMarkedAsSkippedThisRun.push(code)\n\t\t}\n\t}\n\tpublic markAsPermanentlySkipped(code: FeatureCode) {\n\t\tif (!this.isMarkedAsSkipped(code)) {\n\t\t\tthis.Service('settings').markAsPermanentlySkipped(code)\n\t\t}\n\t}\n\n\tpublic isMarkedAsSkipped(code: FeatureCode) {\n\t\treturn (\n\t\t\tthis.featuresMarkedAsSkippedThisRun.indexOf(code) > -1 ||\n\t\t\tthis.Service('settings').isMarkedAsPermanentlySkipped(code)\n\t\t)\n\t}\n\n\tpublic mapFeature<C extends FeatureCode>(code: C, feature: FeatureMap[C]) {\n\t\tthis.featureMap[code] = feature\n\t}\n\n\tpublic getFeature<C extends FeatureCode>(code: C): FeatureMap[C] {\n\t\tconst feature = this.featureMap[code]\n\t\tif (!feature) {\n\t\t\tthrow new SpruceError({ code: 'INVALID_FEATURE_CODE', featureCode: code })\n\t\t}\n\n\t\treturn feature as FeatureMap[C]\n\t}\n\n\tpublic async areInstalled(codes: FeatureCode[]) {\n\t\tconst results = await Promise.all(\n\t\t\tcodes.map((f) => {\n\t\t\t\treturn this.isInstalled(f)\n\t\t\t})\n\t\t)\n\n\t\tfor (let i = 0; i < results.length; i += 1) {\n\t\t\tconst result = results[i]\n\t\t\tif (!result) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\treturn true\n\t}\n\n\tpublic getFeatureDependencies<C extends FeatureCode>(\n\t\tfeatureCode: C,\n\t\ttrackedFeatures: FeatureDependency[] = []\n\t): FeatureDependency[] {\n\t\tlet deps = this.getFeatureDependenciesIncludingSelf(\n\t\t\t{ code: featureCode, isRequired: true },\n\t\t\ttrackedFeatures\n\t\t).filter((f) => f.code !== featureCode)\n\n\t\tdeps = this.sortFeatures(deps)\n\n\t\treturn deps\n\t}\n\n\tprivate getFeatureDependenciesIncludingSelf(\n\t\tfeatureDependency: FeatureDependency,\n\t\ttrackedFeatures: FeatureDependency[] = []\n\t): FeatureDependency[] {\n\t\tconst features: FeatureDependency[] = []\n\n\t\tif (!this.isDependencyInTracker(trackedFeatures, featureDependency)) {\n\t\t\tfeatures.push(featureDependency)\n\t\t\ttrackedFeatures.push(featureDependency)\n\t\t}\n\n\t\tconst feature = this.getFeature(featureDependency.code)\n\t\tconst dependencies = feature.dependencies\n\n\t\tfor (let i = 0; i < dependencies.length; i += 1) {\n\t\t\tconst dependency = dependencies[i]\n\t\t\tif (!this.isDependencyInTracker(trackedFeatures, dependency)) {\n\t\t\t\tfeatures.push(dependency)\n\t\t\t\ttrackedFeatures.push(dependency)\n\t\t\t}\n\t\t}\n\n\t\tfor (let x = 0; x < dependencies.length; x += 1) {\n\t\t\tconst dependency = dependencies[x]\n\t\t\tlet dependencyDependencies = this.getFeatureDependenciesIncludingSelf(\n\t\t\t\tdependency,\n\t\t\t\ttrackedFeatures\n\t\t\t)\n\t\t\tif (!dependency.isRequired) {\n\t\t\t\tdependencyDependencies = dependencyDependencies.map((f) => ({\n\t\t\t\t\t...f,\n\t\t\t\t\tisRequired: false,\n\t\t\t\t}))\n\t\t\t}\n\n\t\t\tfeatures.push(...dependencyDependencies)\n\t\t}\n\n\t\treturn features\n\t}\n\n\tprivate isDependencyInTracker(\n\t\ttrackedFeatures: FeatureDependency[],\n\t\tdependency: FeatureDependency\n\t) {\n\t\treturn !!trackedFeatures.find((f) => f.code === dependency.code)\n\t}\n\n\tpublic async install(\n\t\toptions: InstallFeatureOptions\n\t): Promise<FeatureInstallResponse> {\n\t\tlet {\n\t\t\tfeatures,\n\t\t\tinstallFeatureDependencies = true,\n\t\t\tdidUpdateHandler,\n\t\t} = options\n\n\t\tconst shouldAllowEntertainment = !!features.find((f) => f.code === 'skill')\n\n\t\tif (\n\t\t\tFeatureInstaller.startInFlightIntertainmentHandler &&\n\t\t\tshouldAllowEntertainment\n\t\t) {\n\t\t\tFeatureInstaller.startInFlightIntertainmentHandler(\n\t\t\t\t(handler: InternalUpdateHandler) => {\n\t\t\t\t\tdidUpdateHandler = handler\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\n\t\tthis.pendingFeatureInstalls = {}\n\n\t\tlet results: FeatureInstallResponse = {}\n\n\t\tlet dependenciesToInstall: FeatureDependency[] = []\n\n\t\tfor (let i = 0; i < features.length; i += 1) {\n\t\t\tconst f = features[i]\n\t\t\tconst code = f.code\n\n\t\t\tdidUpdateHandler?.(`Checking if ${code} is installed...`)\n\n\t\t\tconst isInstalled = await this.isInstalled(code)\n\t\t\tif (!isInstalled && installFeatureDependencies) {\n\t\t\t\tdidUpdateHandler?.(`It is not, checking dependencies...`)\n\t\t\t\tdependenciesToInstall = dependenciesToInstall.concat(\n\t\t\t\t\tthis.getFeatureDependenciesIncludingSelf({ code, isRequired: true })\n\t\t\t\t)\n\t\t\t} else if (!isInstalled) {\n\t\t\t\tdependenciesToInstall.push({ code, isRequired: true })\n\t\t\t}\n\t\t}\n\n\t\tdependenciesToInstall = uniq(dependenciesToInstall)\n\t\tdependenciesToInstall = this.sortFeatures(dependenciesToInstall)\n\n\t\tfor (let i = 0; i < dependenciesToInstall.length; i += 1) {\n\t\t\tconst { code, isRequired } = dependenciesToInstall[i]\n\n\t\t\tconst isInstalled = await this.isInstalledOrPendingInstall(code)\n\n\t\t\tif (!isInstalled && isRequired) {\n\t\t\t\tconst installOptions =\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\toptions.features.find((f) => f.code === code)?.options\n\n\t\t\t\tconst installFeature = {\n\t\t\t\t\tcode: dependenciesToInstall[i].code,\n\t\t\t\t\toptions: installOptions,\n\t\t\t\t} as InstallFeature\n\n\t\t\t\tdidUpdateHandler?.(`Installing the ${installFeature.code} feature....`)\n\n\t\t\t\tconst installResults = await this.installFeature(\n\t\t\t\t\tinstallFeature,\n\t\t\t\t\tdidUpdateHandler\n\t\t\t\t)\n\t\t\t\tresults = merge(results, installResults)\n\t\t\t}\n\t\t}\n\n\t\tconst pendingResults = await this.installAllPending(didUpdateHandler)\n\t\tresults = merge(results, pendingResults)\n\n\t\tif (\n\t\t\tFeatureInstaller.stopInFlightIntertainmentHandler &&\n\t\t\tshouldAllowEntertainment\n\t\t) {\n\t\t\tFeatureInstaller.stopInFlightIntertainmentHandler()\n\t\t}\n\n\t\treturn results\n\t}\n\n\tprivate isInstalledOrPendingInstall(code: string) {\n\t\treturn this.pendingFeatureInstalls[code] || this.isInstalled(code as any)\n\t}\n\n\tprivate async installFeature(\n\t\tinstallFeature: InstallFeature,\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t): Promise<FeatureInstallResponse> {\n\t\tthis.pendingFeatureInstalls[installFeature.code] = true\n\n\t\tconst feature = this.getFeature(installFeature.code) as AbstractFeature\n\n\t\tif (feature.optionsSchema) {\n\t\t\t//@ts-ignore\n\t\t\tvalidateSchemaValues(feature.optionsSchema, installFeature.options ?? {})\n\t\t}\n\n\t\tdidUpdateHandler?.(`Running before package install hook...`)\n\t\tconst beforeInstallResults = await feature.beforePackageInstall(\n\t\t\t//@ts-ignore\n\t\t\tinstallFeature.options\n\t\t)\n\n\t\tif (beforeInstallResults.cwd) {\n\t\t\tthis.cwd = beforeInstallResults.cwd\n\t\t}\n\n\t\tdidUpdateHandler?.(`Installing package dependencies...`)\n\t\tconst packagesInstalled =\n\t\t\tawait this.queueInstallPackageDependenciesWithoutEntertainment(\n\t\t\t\tfeature,\n\t\t\t\tdidUpdateHandler\n\t\t\t)\n\n\t\tdidUpdateHandler?.(`Running after package install hook...`)\n\n\t\tthis.afterPackageInstalls.push(installFeature)\n\n\t\tif (!feature.isInstalled) {\n\t\t\tthis.featuresToMarkAsInstalled.push(feature.code)\n\t\t}\n\n\t\tconst files = [...(beforeInstallResults.files ?? [])]\n\n\t\treturn {\n\t\t\tfiles: files ?? undefined,\n\t\t\tpackagesInstalled,\n\t\t}\n\t}\n\n\tpublic async installPackageDependencies(\n\t\tfeature: AbstractFeature,\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t) {\n\t\treturn this.installPackageDependenciesForFeatures(\n\t\t\t[feature],\n\t\t\tdidUpdateHandler\n\t\t)\n\t}\n\n\tpublic async installPackageDependenciesForFeatures(\n\t\tfeatures: AbstractFeature[],\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t) {\n\t\tif (FeatureInstaller.startInFlightIntertainmentHandler) {\n\t\t\tFeatureInstaller.startInFlightIntertainmentHandler(\n\t\t\t\t(handler: InternalUpdateHandler) => {\n\t\t\t\t\tdidUpdateHandler = handler\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\n\t\tfor (const feature of features) {\n\t\t\tawait this.queueInstallPackageDependenciesWithoutEntertainment(\n\t\t\t\tfeature,\n\t\t\t\tdidUpdateHandler\n\t\t\t)\n\t\t}\n\n\t\tawait this.installAllPending(didUpdateHandler)\n\n\t\tif (FeatureInstaller.stopInFlightIntertainmentHandler) {\n\t\t\tFeatureInstaller.stopInFlightIntertainmentHandler()\n\t\t}\n\t}\n\n\tprivate async installAllPending(\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t): Promise<FeatureInstallResponse> {\n\t\tconst pkgService = this.Service('pkg')\n\n\t\tif (this.packagesToInstall.length > 0) {\n\t\t\tdidUpdateHandler?.(\n\t\t\t\t`Installing ${this.packagesToInstall.length} node module${\n\t\t\t\t\tthis.packagesToInstall.length === 1 ? '' : 's'\n\t\t\t\t}. Please be patient.`\n\t\t\t)\n\t\t\tawait pkgService.install(this.packagesToInstall, {})\n\t\t}\n\n\t\tif (this.devPackagesToInstall.length > 0) {\n\t\t\tdidUpdateHandler?.(\n\t\t\t\t`Now installing ${this.devPackagesToInstall.length} DEV node module${\n\t\t\t\t\tthis.devPackagesToInstall.length === 1 ? '' : 's'\n\t\t\t\t}. Please be patient.`\n\t\t\t)\n\t\t\tawait pkgService.install(this.devPackagesToInstall, {\n\t\t\t\tisDev: true,\n\t\t\t})\n\t\t}\n\n\t\tthis.packagesToInstall = []\n\t\tthis.devPackagesToInstall = []\n\n\t\tconst settings = this.Service('settings')\n\n\t\tfor (const code of this.featuresToMarkAsInstalled) {\n\t\t\tsettings.markAsInstalled(code)\n\t\t}\n\n\t\tthis.featuresToMarkAsInstalled = []\n\n\t\tlet results: FeatureInstallResponse = {}\n\n\t\tfor (const installFeature of this.afterPackageInstalls) {\n\t\t\tconst feature = this.getFeature(installFeature.code)\n\t\t\tconst afterInstallResults = await feature.afterPackageInstall(\n\t\t\t\t//@ts-ignore\n\t\t\t\tinstallFeature.options\n\t\t\t)\n\n\t\t\tresults = merge(results, afterInstallResults)\n\t\t}\n\n\t\treturn results\n\t}\n\n\tprivate async queueInstallPackageDependenciesWithoutEntertainment(\n\t\tfeature: AbstractFeature,\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t) {\n\t\tconst packagesInstalled: NpmPackage[] = []\n\t\tconst pkgService = this.Service('pkg')\n\n\t\tfeature.packageDependencies?.forEach((pkg) => {\n\t\t\tconst packageName = pkgService.buildPackageName(pkg)\n\n\t\t\tpackagesInstalled.push(pkg)\n\n\t\t\tdidUpdateHandler?.(`Checking node dependency: ${pkg.name}`)\n\n\t\t\tif (pkg.isDev && this.devPackagesToInstall.indexOf(packageName) === -1) {\n\t\t\t\tthis.devPackagesToInstall.push(packageName)\n\t\t\t} else if (\n\t\t\t\t!pkg.isDev &&\n\t\t\t\tthis.packagesToInstall.indexOf(packageName) === -1\n\t\t\t) {\n\t\t\t\tthis.packagesToInstall.push(packageName)\n\t\t\t}\n\t\t})\n\n\t\tif (this.packagesToInstall.length > 0) {\n\t\t\tdidUpdateHandler?.(\n\t\t\t\t`Queueing install of ${this.packagesToInstall.length} node dependenc${\n\t\t\t\t\tthis.packagesToInstall.length === 1\n\t\t\t\t\t\t? 'y.'\n\t\t\t\t\t\t: 'ies for ' + this.getFeatureNameAndDesc(feature) + '...'\n\t\t\t\t}.`\n\t\t\t)\n\t\t}\n\n\t\tif (this.devPackagesToInstall.length > 0) {\n\t\t\tdidUpdateHandler?.(\n\t\t\t\t`Queueing install of ${\n\t\t\t\t\tthis.devPackagesToInstall.length\n\t\t\t\t} DEV node dependenc${\n\t\t\t\t\tthis.devPackagesToInstall.length === 1\n\t\t\t\t\t\t? 'y.'\n\t\t\t\t\t\t: 'ies for ' + this.getFeatureNameAndDesc(feature) + '. 🤘'\n\t\t\t\t}.`\n\t\t\t)\n\t\t}\n\n\t\treturn packagesInstalled\n\t}\n\n\tprivate getFeatureNameAndDesc(feature: AbstractFeature) {\n\t\treturn `${feature.nameReadable}${\n\t\t\tfeature.description ? ' (' + feature.description + ')' : ''\n\t\t}`\n\t}\n\n\tprivate sortFeatures(\n\t\tfeatureDependencies: FeatureDependency[]\n\t): FeatureDependency[] {\n\t\treturn [...featureDependencies].sort((a, b) => {\n\t\t\tconst aFeature = this.getFeature(a.code)\n\t\t\tconst bFeature = this.getFeature(b.code)\n\n\t\t\tconst aDependsOnB = aFeature.dependencies.find((d) => d.code === b.code)\n\t\t\tconst bDependsOnA = bFeature.dependencies.find((d) => d.code === a.code)\n\n\t\t\tif (\n\t\t\t\taDependsOnB ||\n\t\t\t\taFeature.installOrderWeight < bFeature.installOrderWeight\n\t\t\t) {\n\t\t\t\treturn 1\n\t\t\t} else if (\n\t\t\t\tbDependsOnA ||\n\t\t\t\taFeature.installOrderWeight > bFeature.installOrderWeight\n\t\t\t) {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\treturn 0\n\t\t})\n\t}\n\n\tpublic Service<S extends Service>(type: S, cwd?: string): ServiceMap[S] {\n\t\treturn this.serviceFactory.Service(cwd ?? this.cwd, type)\n\t}\n\n\tpublic getOptionsForFeature(code: FeatureCode) {\n\t\treturn this.getFeature(code).optionsSchema\n\t}\n\n\tpublic getAllCodes(): FeatureCode[] {\n\t\tconst codes = Object.keys(this.featureMap) as FeatureCode[]\n\t\treturn this.sortFeatures(\n\t\t\tcodes.map((code) => ({ code, isRequired: true }))\n\t\t).map((dep) => dep.code)\n\t}\n\n\tpublic async getInstalledFeatures() {\n\t\tconst installed = await Promise.all(\n\t\t\tthis.getAllCodes().map(async (code) => {\n\t\t\t\tconst isInstalled = await this.isInstalled(code)\n\t\t\t\tif (isInstalled) {\n\t\t\t\t\treturn this.getFeature(code)\n\t\t\t\t}\n\n\t\t\t\treturn false\n\t\t\t})\n\t\t)\n\n\t\treturn installed.filter((f) => !!f) as FeatureMap[keyof FeatureMap][]\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FeatureInstaller.js","names":["FeatureInstaller","cwd","serviceFactory","code","feature","getFeature","isInstalled","Service","isMarkedAsInstalled","isMarkedAsSkipped","featuresMarkedAsSkippedThisRun","push","markAsPermanentlySkipped","indexOf","isMarkedAsPermanentlySkipped","featureMap","SpruceError","featureCode","codes","Promise","all","map","f","results","i","length","result","trackedFeatures","deps","getFeatureDependenciesIncludingSelf","isRequired","filter","sortFeatures","featureDependency","features","isDependencyInTracker","dependencies","dependency","x","dependencyDependencies","find","options","installFeatureDependencies","didUpdateHandler","shouldAllowEntertainment","startInFlightIntertainmentHandler","handler","pendingFeatureInstalls","dependenciesToInstall","concat","uniq","isInstalledOrPendingInstall","installOptions","installFeature","installResults","merge","installAllPending","pendingResults","stopInFlightIntertainmentHandler","optionsSchema","validateSchemaValues","beforePackageInstall","beforeInstallResults","queueInstallPackageDependenciesWithoutEntertainment","packagesInstalled","afterPackageInstalls","featuresToMarkAsInstalled","files","undefined","installPackageDependenciesForFeatures","pkgService","packagesToInstall","install","devPackagesToInstall","isDev","settings","markAsInstalled","afterPackageInstall","afterInstallResults","packageDependencies","forEach","pkg","packageName","buildPackageName","name","getFeatureNameAndDesc","nameReadable","description","featureDependencies","sort","a","b","aFeature","bFeature","aDependsOnB","d","bDependsOnA","installOrderWeight","type","Object","keys","dep","getAllCodes","installed"],"sources":["../../src/features/FeatureInstaller.ts"],"sourcesContent":["import { validateSchemaValues } from '@sprucelabs/schema'\nimport { uniq } from 'lodash'\nimport merge from 'lodash/merge'\nimport SpruceError from '../errors/SpruceError'\nimport ServiceFactory, {\n\tService,\n\tServiceProvider,\n\tServiceMap,\n} from '../services/ServiceFactory'\nimport { InternalUpdateHandler, NpmPackage } from '../types/cli.types'\nimport AbstractFeature, { FeatureDependency } from './AbstractFeature'\nimport {\n\tInstallFeatureOptions,\n\tFeatureInstallResponse,\n\tFeatureCode,\n\tInstallFeature,\n\tFeatureMap,\n} from './features.types'\n\nexport default class FeatureInstaller implements ServiceProvider {\n\tpublic cwd: string\n\n\tprivate featureMap: Partial<FeatureMap> = {}\n\tprivate serviceFactory: ServiceFactory\n\tprivate featuresMarkedAsSkippedThisRun: FeatureCode[] = []\n\tpublic static startInFlightIntertainmentHandler?: (\n\t\tdidUpdateHandler: (handler: (message: string) => void) => void\n\t) => void\n\tpublic static stopInFlightIntertainmentHandler?: () => void\n\tprivate packagesToInstall: string[] = []\n\tprivate devPackagesToInstall: string[] = []\n\tprivate featuresToMarkAsInstalled: string[] = []\n\tprivate afterPackageInstalls: InstallFeature[] = []\n\tprivate pendingFeatureInstalls: Record<string, boolean> = {}\n\n\tpublic constructor(cwd: string, serviceFactory: ServiceFactory) {\n\t\tthis.cwd = cwd\n\t\tthis.serviceFactory = serviceFactory\n\t}\n\n\tpublic async isInstalled(code: FeatureCode): Promise<boolean> {\n\t\tconst feature = this.getFeature(code)\n\n\t\tif (feature.isInstalled) {\n\t\t\treturn feature.isInstalled()\n\t\t}\n\n\t\treturn this.Service('settings').isMarkedAsInstalled(code)\n\t}\n\n\tpublic markAsSkippedThisRun(code: FeatureCode) {\n\t\tif (!this.isMarkedAsSkipped(code)) {\n\t\t\tthis.featuresMarkedAsSkippedThisRun.push(code)\n\t\t}\n\t}\n\tpublic markAsPermanentlySkipped(code: FeatureCode) {\n\t\tif (!this.isMarkedAsSkipped(code)) {\n\t\t\tthis.Service('settings').markAsPermanentlySkipped(code)\n\t\t}\n\t}\n\n\tpublic isMarkedAsSkipped(code: FeatureCode) {\n\t\treturn (\n\t\t\tthis.featuresMarkedAsSkippedThisRun.indexOf(code) > -1 ||\n\t\t\tthis.Service('settings').isMarkedAsPermanentlySkipped(code)\n\t\t)\n\t}\n\n\tpublic mapFeature<C extends FeatureCode>(code: C, feature: FeatureMap[C]) {\n\t\tthis.featureMap[code] = feature\n\t}\n\n\tpublic getFeature<C extends FeatureCode>(code: C): FeatureMap[C] {\n\t\tconst feature = this.featureMap[code]\n\t\tif (!feature) {\n\t\t\tthrow new SpruceError({ code: 'INVALID_FEATURE_CODE', featureCode: code })\n\t\t}\n\n\t\treturn feature as FeatureMap[C]\n\t}\n\n\tpublic async areInstalled(codes: FeatureCode[]) {\n\t\tconst results = await Promise.all(\n\t\t\tcodes.map((f) => {\n\t\t\t\treturn this.isInstalled(f)\n\t\t\t})\n\t\t)\n\n\t\tfor (let i = 0; i < results.length; i += 1) {\n\t\t\tconst result = results[i]\n\t\t\tif (!result) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\treturn true\n\t}\n\n\tpublic getFeatureDependencies<C extends FeatureCode>(\n\t\tfeatureCode: C,\n\t\ttrackedFeatures: FeatureDependency[] = []\n\t): FeatureDependency[] {\n\t\tlet deps = this.getFeatureDependenciesIncludingSelf(\n\t\t\t{ code: featureCode, isRequired: true },\n\t\t\ttrackedFeatures\n\t\t).filter((f) => f.code !== featureCode)\n\n\t\tdeps = this.sortFeatures(deps)\n\n\t\treturn deps\n\t}\n\n\tprivate getFeatureDependenciesIncludingSelf(\n\t\tfeatureDependency: FeatureDependency,\n\t\ttrackedFeatures: FeatureDependency[] = []\n\t): FeatureDependency[] {\n\t\tconst features: FeatureDependency[] = []\n\n\t\tif (!this.isDependencyInTracker(trackedFeatures, featureDependency)) {\n\t\t\tfeatures.push(featureDependency)\n\t\t\ttrackedFeatures.push(featureDependency)\n\t\t}\n\n\t\tconst feature = this.getFeature(featureDependency.code)\n\t\tconst dependencies = feature.dependencies\n\n\t\tfor (let i = 0; i < dependencies.length; i += 1) {\n\t\t\tconst dependency = dependencies[i]\n\t\t\tif (!this.isDependencyInTracker(trackedFeatures, dependency)) {\n\t\t\t\tfeatures.push(dependency)\n\t\t\t\ttrackedFeatures.push(dependency)\n\t\t\t}\n\t\t}\n\n\t\tfor (let x = 0; x < dependencies.length; x += 1) {\n\t\t\tconst dependency = dependencies[x]\n\t\t\tlet dependencyDependencies = this.getFeatureDependenciesIncludingSelf(\n\t\t\t\tdependency,\n\t\t\t\ttrackedFeatures\n\t\t\t)\n\t\t\tif (!dependency.isRequired) {\n\t\t\t\tdependencyDependencies = dependencyDependencies.map((f) => ({\n\t\t\t\t\t...f,\n\t\t\t\t\tisRequired: false,\n\t\t\t\t}))\n\t\t\t}\n\n\t\t\tfeatures.push(...dependencyDependencies)\n\t\t}\n\n\t\treturn features\n\t}\n\n\tprivate isDependencyInTracker(\n\t\ttrackedFeatures: FeatureDependency[],\n\t\tdependency: FeatureDependency\n\t) {\n\t\treturn !!trackedFeatures.find((f) => f.code === dependency.code)\n\t}\n\n\tpublic async install(\n\t\toptions: InstallFeatureOptions\n\t): Promise<FeatureInstallResponse> {\n\t\tlet {\n\t\t\tfeatures,\n\t\t\tinstallFeatureDependencies = true,\n\t\t\tdidUpdateHandler,\n\t\t} = options\n\n\t\tconst shouldAllowEntertainment = !!features.find((f) => f.code === 'skill')\n\n\t\tif (\n\t\t\tFeatureInstaller.startInFlightIntertainmentHandler &&\n\t\t\tshouldAllowEntertainment\n\t\t) {\n\t\t\tFeatureInstaller.startInFlightIntertainmentHandler(\n\t\t\t\t(handler: InternalUpdateHandler) => {\n\t\t\t\t\tdidUpdateHandler = handler\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\n\t\tthis.pendingFeatureInstalls = {}\n\n\t\tlet results: FeatureInstallResponse = {}\n\n\t\tlet dependenciesToInstall: FeatureDependency[] = []\n\n\t\tfor (let i = 0; i < features.length; i += 1) {\n\t\t\tconst f = features[i]\n\t\t\tconst code = f.code\n\n\t\t\tdidUpdateHandler?.(`Checking if ${code} is installed...`)\n\n\t\t\tconst isInstalled = await this.isInstalled(code)\n\t\t\tif (!isInstalled && installFeatureDependencies) {\n\t\t\t\tdidUpdateHandler?.(`It is not, checking dependencies...`)\n\t\t\t\tdependenciesToInstall = dependenciesToInstall.concat(\n\t\t\t\t\tthis.getFeatureDependenciesIncludingSelf({ code, isRequired: true })\n\t\t\t\t)\n\t\t\t} else if (!isInstalled) {\n\t\t\t\tdependenciesToInstall.push({ code, isRequired: true })\n\t\t\t}\n\t\t}\n\n\t\tdependenciesToInstall = uniq(dependenciesToInstall)\n\t\tdependenciesToInstall = this.sortFeatures(dependenciesToInstall)\n\n\t\tfor (let i = 0; i < dependenciesToInstall.length; i += 1) {\n\t\t\tconst { code, isRequired } = dependenciesToInstall[i]\n\n\t\t\tconst isInstalled = await this.isInstalledOrPendingInstall(code)\n\n\t\t\tif (!isInstalled && isRequired) {\n\t\t\t\tconst installOptions =\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\toptions.features.find((f) => f.code === code)?.options\n\n\t\t\t\tconst installFeature = {\n\t\t\t\t\tcode: dependenciesToInstall[i].code,\n\t\t\t\t\toptions: installOptions,\n\t\t\t\t} as InstallFeature\n\n\t\t\t\tdidUpdateHandler?.(`Installing the ${installFeature.code} feature....`)\n\n\t\t\t\tconst installResults = await this.installFeature(\n\t\t\t\t\tinstallFeature,\n\t\t\t\t\tdidUpdateHandler\n\t\t\t\t)\n\t\t\t\tresults = merge(results, installResults)\n\t\t\t}\n\t\t}\n\n\t\tconst pendingResults = await this.installAllPending(didUpdateHandler)\n\t\tresults = merge(results, pendingResults)\n\n\t\tif (\n\t\t\tFeatureInstaller.stopInFlightIntertainmentHandler &&\n\t\t\tshouldAllowEntertainment\n\t\t) {\n\t\t\tFeatureInstaller.stopInFlightIntertainmentHandler()\n\t\t}\n\n\t\treturn results\n\t}\n\n\tprivate isInstalledOrPendingInstall(code: string) {\n\t\treturn this.pendingFeatureInstalls[code] || this.isInstalled(code as any)\n\t}\n\n\tprivate async installFeature(\n\t\tinstallFeature: InstallFeature,\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t): Promise<FeatureInstallResponse> {\n\t\tthis.pendingFeatureInstalls[installFeature.code] = true\n\n\t\tconst feature = this.getFeature(installFeature.code) as AbstractFeature\n\n\t\tif (feature.optionsSchema) {\n\t\t\t//@ts-ignore\n\t\t\tvalidateSchemaValues(feature.optionsSchema, installFeature.options ?? {})\n\t\t}\n\n\t\tdidUpdateHandler?.(`Running before package install hook...`)\n\t\tconst beforeInstallResults = await feature.beforePackageInstall(\n\t\t\t//@ts-ignore\n\t\t\tinstallFeature.options\n\t\t)\n\n\t\tif (beforeInstallResults.cwd) {\n\t\t\tthis.cwd = beforeInstallResults.cwd\n\t\t}\n\n\t\tdidUpdateHandler?.(`Installing package dependencies...`)\n\t\tconst packagesInstalled =\n\t\t\tawait this.queueInstallPackageDependenciesWithoutEntertainment(\n\t\t\t\tfeature,\n\t\t\t\tdidUpdateHandler\n\t\t\t)\n\n\t\tdidUpdateHandler?.(`Running after package install hook...`)\n\n\t\tthis.afterPackageInstalls.push(installFeature)\n\n\t\tif (!feature.isInstalled) {\n\t\t\tthis.featuresToMarkAsInstalled.push(feature.code)\n\t\t}\n\n\t\tconst files = [...(beforeInstallResults.files ?? [])]\n\n\t\treturn {\n\t\t\tfiles: files ?? undefined,\n\t\t\tpackagesInstalled,\n\t\t}\n\t}\n\n\tpublic async installPackageDependencies(\n\t\tfeature: AbstractFeature,\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t) {\n\t\treturn this.installPackageDependenciesForFeatures(\n\t\t\t[feature],\n\t\t\tdidUpdateHandler\n\t\t)\n\t}\n\n\tpublic async installPackageDependenciesForFeatures(\n\t\tfeatures: AbstractFeature[],\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t) {\n\t\tif (FeatureInstaller.startInFlightIntertainmentHandler) {\n\t\t\tFeatureInstaller.startInFlightIntertainmentHandler(\n\t\t\t\t(handler: InternalUpdateHandler) => {\n\t\t\t\t\tdidUpdateHandler = handler\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\n\t\tfor (const feature of features) {\n\t\t\tawait this.queueInstallPackageDependenciesWithoutEntertainment(\n\t\t\t\tfeature,\n\t\t\t\tdidUpdateHandler\n\t\t\t)\n\t\t}\n\n\t\tawait this.installAllPending(didUpdateHandler)\n\n\t\tif (FeatureInstaller.stopInFlightIntertainmentHandler) {\n\t\t\tFeatureInstaller.stopInFlightIntertainmentHandler()\n\t\t}\n\t}\n\n\tprivate async installAllPending(\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t): Promise<FeatureInstallResponse> {\n\t\tconst pkgService = this.Service('pkg')\n\n\t\tif (this.packagesToInstall.length > 0) {\n\t\t\tdidUpdateHandler?.(\n\t\t\t\t`Installing ${this.packagesToInstall.length} node module${\n\t\t\t\t\tthis.packagesToInstall.length === 1 ? '' : 's'\n\t\t\t\t}. Please be patient.`\n\t\t\t)\n\t\t\tawait pkgService.install(this.packagesToInstall, {})\n\t\t}\n\n\t\tif (this.devPackagesToInstall.length > 0) {\n\t\t\tdidUpdateHandler?.(\n\t\t\t\t`Now installing ${this.devPackagesToInstall.length} DEV node module${\n\t\t\t\t\tthis.devPackagesToInstall.length === 1 ? '' : 's'\n\t\t\t\t}. Please be patient.`\n\t\t\t)\n\t\t\tawait pkgService.install(this.devPackagesToInstall, {\n\t\t\t\tisDev: true,\n\t\t\t})\n\t\t}\n\n\t\tthis.packagesToInstall = []\n\t\tthis.devPackagesToInstall = []\n\n\t\tconst settings = this.Service('settings')\n\n\t\tfor (const code of this.featuresToMarkAsInstalled) {\n\t\t\tsettings.markAsInstalled(code)\n\t\t}\n\n\t\tthis.featuresToMarkAsInstalled = []\n\n\t\tlet results: FeatureInstallResponse = {}\n\n\t\tfor (const installFeature of this.afterPackageInstalls) {\n\t\t\tconst feature = this.getFeature(installFeature.code)\n\t\t\tconst afterInstallResults = await feature.afterPackageInstall(\n\t\t\t\t//@ts-ignore\n\t\t\t\tinstallFeature.options\n\t\t\t)\n\n\t\t\tresults = merge(results, afterInstallResults)\n\t\t}\n\n\t\treturn results\n\t}\n\n\tprivate async queueInstallPackageDependenciesWithoutEntertainment(\n\t\tfeature: AbstractFeature,\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t) {\n\t\tconst packagesInstalled: NpmPackage[] = []\n\t\tconst pkgService = this.Service('pkg')\n\n\t\tfeature.packageDependencies?.forEach((pkg) => {\n\t\t\tconst packageName = pkgService.buildPackageName(pkg)\n\n\t\t\tpackagesInstalled.push(pkg)\n\n\t\t\tdidUpdateHandler?.(`Checking node dependency: ${pkg.name}`)\n\n\t\t\tif (pkg.isDev && this.devPackagesToInstall.indexOf(packageName) === -1) {\n\t\t\t\tthis.devPackagesToInstall.push(packageName)\n\t\t\t} else if (\n\t\t\t\t!pkg.isDev &&\n\t\t\t\tthis.packagesToInstall.indexOf(packageName) === -1\n\t\t\t) {\n\t\t\t\tthis.packagesToInstall.push(packageName)\n\t\t\t}\n\t\t})\n\n\t\tif (this.packagesToInstall.length > 0) {\n\t\t\tdidUpdateHandler?.(\n\t\t\t\t`Queueing install of ${this.packagesToInstall.length} node dependenc${\n\t\t\t\t\tthis.packagesToInstall.length === 1\n\t\t\t\t\t\t? 'y.'\n\t\t\t\t\t\t: 'ies for ' + this.getFeatureNameAndDesc(feature) + '...'\n\t\t\t\t}.`\n\t\t\t)\n\t\t}\n\n\t\tif (this.devPackagesToInstall.length > 0) {\n\t\t\tdidUpdateHandler?.(\n\t\t\t\t`Queueing install of ${\n\t\t\t\t\tthis.devPackagesToInstall.length\n\t\t\t\t} DEV node dependenc${\n\t\t\t\t\tthis.devPackagesToInstall.length === 1\n\t\t\t\t\t\t? 'y.'\n\t\t\t\t\t\t: 'ies for ' + this.getFeatureNameAndDesc(feature) + '. 🤘'\n\t\t\t\t}.`\n\t\t\t)\n\t\t}\n\n\t\treturn packagesInstalled\n\t}\n\n\tprivate getFeatureNameAndDesc(feature: AbstractFeature) {\n\t\treturn `${feature.nameReadable}${\n\t\t\tfeature.description ? ' (' + feature.description + ')' : ''\n\t\t}`\n\t}\n\n\tprivate sortFeatures(\n\t\tfeatureDependencies: FeatureDependency[]\n\t): FeatureDependency[] {\n\t\treturn [...featureDependencies].sort((a, b) => {\n\t\t\tconst aFeature = this.getFeature(a.code)\n\t\t\tconst bFeature = this.getFeature(b.code)\n\n\t\t\tconst aDependsOnB = aFeature.dependencies.find((d) => d.code === b.code)\n\t\t\tconst bDependsOnA = bFeature.dependencies.find((d) => d.code === a.code)\n\n\t\t\tif (\n\t\t\t\taDependsOnB ||\n\t\t\t\taFeature.installOrderWeight < bFeature.installOrderWeight\n\t\t\t) {\n\t\t\t\treturn 1\n\t\t\t} else if (\n\t\t\t\tbDependsOnA ||\n\t\t\t\taFeature.installOrderWeight > bFeature.installOrderWeight\n\t\t\t) {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\treturn 0\n\t\t})\n\t}\n\n\tpublic Service<S extends Service>(type: S, cwd?: string): ServiceMap[S] {\n\t\treturn this.serviceFactory.Service(cwd ?? this.cwd, type)\n\t}\n\n\tpublic getOptionsForFeature(code: FeatureCode) {\n\t\treturn this.getFeature(code).optionsSchema\n\t}\n\n\tpublic getAllCodes(): FeatureCode[] {\n\t\tconst codes = Object.keys(this.featureMap) as FeatureCode[]\n\t\treturn this.sortFeatures(\n\t\t\tcodes.map((code) => ({ code, isRequired: true }))\n\t\t).map((dep) => dep.code)\n\t}\n\n\tpublic async getInstalledFeatures() {\n\t\tconst installed = await Promise.all(\n\t\t\tthis.getAllCodes().map(async (code) => {\n\t\t\t\tconst isInstalled = await this.isInstalled(code)\n\t\t\t\tif (isInstalled) {\n\t\t\t\t\treturn this.getFeature(code)\n\t\t\t\t}\n\n\t\t\t\treturn false\n\t\t\t})\n\t\t)\n\n\t\treturn installed.filter((f) => !!f) as FeatureMap[keyof FeatureMap][]\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OverrideActionDecorator.js","names":["methodDelegator","getAllFuncs","toCheck","props","obj","push","Object","getOwnPropertyNames","getPrototypeOf","sort","filter","e","i","arr","delegateFunctionCalls","from","to","prop","OverrideActionDecorator","options","optionsArg","assertCommandIsNotBlocked","mixinOptionOverrides","childAction","execute","response","action","feature","ui","blockedCommands","optionOverrides","actionCode","SpruceError","code","friendlyMessage","nameReadable","parent","invocationMessage","commandAliases","optionsSchema","commands","getCommands","commandStr","command","hint","featuresUtil","generateCommandsIncludingAliases","optionsArgs","overrides","renderLine","renderObject"],"sources":["../../src/features/OverrideActionDecorator.ts"],"sourcesContent":["import { GraphicsInterface } from '@sprucelabs/spruce-skill-utils'\nimport SpruceError from '../errors/SpruceError'\nimport { FeatureAction } from '../features/features.types'\nimport { BlockedCommands, OptionOverrides } from '../types/cli.types'\nimport AbstractFeature from './AbstractFeature'\nimport featuresUtil from './feature.utilities'\n\nconst methodDelegator = {\n\tgetAllFuncs(toCheck: any) {\n\t\tconst props = []\n\t\tlet obj = toCheck\n\t\tdo {\n\t\t\tprops.push(...Object.getOwnPropertyNames(obj))\n\t\t} while ((obj = Object.getPrototypeOf(obj)))\n\n\t\treturn props.sort().filter((e: any, i: any, arr: any) => {\n\t\t\treturn e != arr[i + 1] && typeof toCheck[e] == 'function'\n\t\t})\n\t},\n\n\tdelegateFunctionCalls(from: any, to: any) {\n\t\tconst props = this.getAllFuncs(to)\n\t\tfor (const prop of props) {\n\t\t\t//@ts-ignore\n\t\t\tif (!from[prop]) {\n\t\t\t\t//@ts-ignore\n\t\t\t\tfrom[prop] = (...args: []) => {\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\treturn to[prop](...args)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n}\n\nexport default class OverrideActionDecorator implements FeatureAction {\n\tprivate blockedCommands?: BlockedCommands\n\tprivate optionOverrides?: OptionOverrides\n\tprivate ui?: GraphicsInterface\n\tprivate actionCode: string\n\n\tpublic get invocationMessage() {\n\t\treturn this.childAction.invocationMessage\n\t}\n\n\tpublic get commandAliases() {\n\t\treturn this.childAction.commandAliases\n\t}\n\n\tprivate childAction: FeatureAction\n\tprivate parent: AbstractFeature\n\n\tpublic get optionsSchema() {\n\t\treturn this.childAction.optionsSchema\n\t}\n\n\tpublic getChild() {\n\t\treturn this.childAction\n\t}\n\n\tpublic constructor(options: {\n\t\taction: FeatureAction\n\t\tfeature: AbstractFeature\n\t\tui?: GraphicsInterface\n\t\tblockedCommands?: BlockedCommands\n\t\toptionOverrides?: OptionOverrides\n\t\tactionCode: string\n\t}) {\n\t\tconst {\n\t\t\taction,\n\t\t\tfeature,\n\t\t\tui,\n\t\t\tblockedCommands,\n\t\t\toptionOverrides,\n\t\t\tactionCode,\n\t\t} = options\n\n\t\tif (!action || !action.execute) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'GENERIC',\n\t\t\t\tfriendlyMessage: `${feature.nameReadable} failed to load action.`,\n\t\t\t})\n\t\t}\n\n\t\tthis.childAction = action\n\t\tthis.parent = feature\n\t\tthis.blockedCommands = blockedCommands\n\t\tthis.optionOverrides = optionOverrides\n\t\tthis.ui = ui\n\t\tthis.actionCode = actionCode\n\n\t\tmethodDelegator.delegateFunctionCalls(this, action)\n\t}\n\n\tprivate assertCommandIsNotBlocked() {\n\t\tconst commands = this.getCommands()\n\n\t\tfor (const commandStr of commands) {\n\t\t\tif (this.blockedCommands?.[commandStr]) {\n\t\t\t\tthrow new SpruceError({\n\t\t\t\t\tcode: 'COMMAND_BLOCKED',\n\t\t\t\t\tcommand: commandStr,\n\t\t\t\t\thint: this.blockedCommands[commandStr],\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic execute = async (optionsArg: any) => {\n\t\tthis.assertCommandIsNotBlocked()\n\n\t\tlet { ...options } = optionsArg\n\n\t\toptions = this.mixinOptionOverrides(options)\n\n\t\tlet response = await this.childAction.execute(options)\n\n\t\treturn response\n\t}\n\n\tprivate getCommands() {\n\t\treturn featuresUtil.generateCommandsIncludingAliases(\n\t\t\tthis.parent.code,\n\t\t\tthis.actionCode,\n\t\t\tthis\n\t\t)\n\t}\n\n\tprivate mixinOptionOverrides(optionsArgs: any) {\n\t\tlet { ...options } = optionsArgs\n\n\t\tconst commands = this.getCommands()\n\n\t\tfor (const commandStr of commands) {\n\t\t\tconst overrides = this.optionOverrides?.[commandStr]\n\t\t\tif (overrides) {\n\t\t\t\tthis.ui?.renderLine(`Overrides found in package.json`)\n\t\t\t\tthis.ui?.renderObject(overrides)\n\t\t\t\toptions = {\n\t\t\t\t\t...options,\n\t\t\t\t\t...overrides,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn options\n\t}\n}\n"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"OverrideActionDecorator.js","names":["methodDelegator","getAllFuncs","toCheck","props","obj","push","Object","getOwnPropertyNames","getPrototypeOf","sort","filter","e","i","arr","delegateFunctionCalls","from","to","prop","OverrideActionDecorator","options","optionsArg","assertCommandIsNotBlocked","mixinOptionOverrides","childAction","execute","response","action","feature","ui","blockedCommands","optionOverrides","actionCode","SpruceError","code","friendlyMessage","nameReadable","parent","invocationMessage","commandAliases","optionsSchema","commands","getCommands","commandStr","command","hint","featuresUtil","generateCommandsIncludingAliases","optionsArgs","overrides","renderLine","renderObject"],"sources":["../../src/features/OverrideActionDecorator.ts"],"sourcesContent":["import { GraphicsInterface } from '@sprucelabs/spruce-skill-utils'\nimport SpruceError from '../errors/SpruceError'\nimport { FeatureAction } from '../features/features.types'\nimport { BlockedCommands, OptionOverrides } from '../types/cli.types'\nimport AbstractFeature from './AbstractFeature'\nimport featuresUtil from './feature.utilities'\n\nconst methodDelegator = {\n\tgetAllFuncs(toCheck: any) {\n\t\tconst props = []\n\t\tlet obj = toCheck\n\t\tdo {\n\t\t\tprops.push(...Object.getOwnPropertyNames(obj))\n\t\t} while ((obj = Object.getPrototypeOf(obj)))\n\n\t\treturn props.sort().filter((e: any, i: any, arr: any) => {\n\t\t\treturn e != arr[i + 1] && typeof toCheck[e] == 'function'\n\t\t})\n\t},\n\n\tdelegateFunctionCalls(from: any, to: any) {\n\t\tconst props = this.getAllFuncs(to)\n\t\tfor (const prop of props) {\n\t\t\t//@ts-ignore\n\t\t\tif (!from[prop]) {\n\t\t\t\t//@ts-ignore\n\t\t\t\tfrom[prop] = (...args: []) => {\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\treturn to[prop](...args)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n}\n\nexport default class OverrideActionDecorator implements FeatureAction {\n\tprivate blockedCommands?: BlockedCommands\n\tprivate optionOverrides?: OptionOverrides\n\tprivate ui?: GraphicsInterface\n\tprivate actionCode: string\n\n\tpublic get invocationMessage() {\n\t\treturn this.childAction.invocationMessage\n\t}\n\n\tpublic get commandAliases() {\n\t\treturn this.childAction.commandAliases\n\t}\n\n\tprivate childAction: FeatureAction\n\tprivate parent: AbstractFeature\n\n\tpublic get optionsSchema() {\n\t\treturn this.childAction.optionsSchema\n\t}\n\n\tpublic getChild() {\n\t\treturn this.childAction\n\t}\n\n\tpublic constructor(options: {\n\t\taction: FeatureAction\n\t\tfeature: AbstractFeature\n\t\tui?: GraphicsInterface\n\t\tblockedCommands?: BlockedCommands\n\t\toptionOverrides?: OptionOverrides\n\t\tactionCode: string\n\t}) {\n\t\tconst {\n\t\t\taction,\n\t\t\tfeature,\n\t\t\tui,\n\t\t\tblockedCommands,\n\t\t\toptionOverrides,\n\t\t\tactionCode,\n\t\t} = options\n\n\t\tif (!action || !action.execute) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'GENERIC',\n\t\t\t\tfriendlyMessage: `${feature.nameReadable} failed to load action.`,\n\t\t\t})\n\t\t}\n\n\t\tthis.childAction = action\n\t\tthis.parent = feature\n\t\tthis.blockedCommands = blockedCommands\n\t\tthis.optionOverrides = optionOverrides\n\t\tthis.ui = ui\n\t\tthis.actionCode = actionCode\n\n\t\tmethodDelegator.delegateFunctionCalls(this, action)\n\t}\n\n\tprivate assertCommandIsNotBlocked() {\n\t\tconst commands = this.getCommands()\n\n\t\tfor (const commandStr of commands) {\n\t\t\tif (this.blockedCommands?.[commandStr]) {\n\t\t\t\tthrow new SpruceError({\n\t\t\t\t\tcode: 'COMMAND_BLOCKED',\n\t\t\t\t\tcommand: commandStr,\n\t\t\t\t\thint: this.blockedCommands[commandStr],\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\tpublic execute = async (optionsArg: any) => {\n\t\tthis.assertCommandIsNotBlocked()\n\n\t\tlet { ...options } = optionsArg\n\n\t\toptions = this.mixinOptionOverrides(options)\n\n\t\tlet response = await this.childAction.execute(options)\n\n\t\treturn response\n\t}\n\n\tprivate getCommands() {\n\t\treturn featuresUtil.generateCommandsIncludingAliases(\n\t\t\tthis.parent.code,\n\t\t\tthis.actionCode,\n\t\t\tthis\n\t\t)\n\t}\n\n\tprivate mixinOptionOverrides(optionsArgs: any) {\n\t\tlet { ...options } = optionsArgs\n\n\t\tconst commands = this.getCommands()\n\n\t\tfor (const commandStr of commands) {\n\t\t\tconst overrides = this.optionOverrides?.[commandStr]\n\t\t\tif (overrides) {\n\t\t\t\tthis.ui?.renderLine(`Overrides found in package.json`)\n\t\t\t\tthis.ui?.renderObject(overrides)\n\t\t\t\toptions = {\n\t\t\t\t\t...options,\n\t\t\t\t\t...overrides,\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn options\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CacheFeature.js","names":["CacheFeature","diskUtil","resolvePath","__dirname","AbstractFeature"],"sources":["../../../src/features/cache/CacheFeature.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport AbstractFeature from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tcache: CacheFeature\n\t}\n}\n\nexport default class CacheFeature extends AbstractFeature {\n\tpublic description = 'Caching for all things Sprucebot.'\n\tpublic code: FeatureCode = 'cache'\n\tpublic nameReadable = 'Cache'\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic async isInstalled() {\n\t\treturn true\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;IASqBA,Y;;;;;;;;;;;;;;;oGACC,mC;6FACM,O;qGACL,O;mGACFC,
|
|
1
|
+
{"version":3,"file":"CacheFeature.js","names":["CacheFeature","diskUtil","resolvePath","__dirname","AbstractFeature"],"sources":["../../../src/features/cache/CacheFeature.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport AbstractFeature from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tcache: CacheFeature\n\t}\n}\n\nexport default class CacheFeature extends AbstractFeature {\n\tpublic description = 'Caching for all things Sprucebot.'\n\tpublic code: FeatureCode = 'cache'\n\tpublic nameReadable = 'Cache'\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic async isInstalled() {\n\t\treturn true\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;IASqBA,Y;;;;;;;;;;;;;;;oGACC,mC;6FACM,O;qGACL,O;mGACFC,0BAAA,CAASC,WAAT,CAAqBC,SAArB,EAAgC,SAAhC,C;;;;;;;uGAEpB;QAAA;UAAA;YAAA;cAAA;gBAAA,iCACQ,IADR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;EANyCC,4B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DisableAction.js","names":["optionsSchema","id","description","fields","DisableCacheAction","_options","Service","execute","DISABLE_NPM_CACHE_COMMAND","headline","summaryLines","error","options","cmd","includes","SpruceError","code","dependencies","name","hint","message","toLowerCase","errors","AbstractAction"],"sources":["../../../../src/features/cache/actions/DisableAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport { DISABLE_NPM_CACHE_COMMAND } from '../constants'\n\nconst optionsSchema = buildSchema({\n\tid: 'disableCacheAction',\n\tdescription: 'Disable caching.',\n\tfields: {},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class DisableCacheAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = [\n\t\t'disable.cache',\n\t\t'stop.cache',\n\t\t'disable.caching',\n\t\t'stop.caching',\n\t]\n\tpublic invocationMessage = 'Disabling cache...'\n\n\tpublic async execute(_options: Options): Promise<FeatureActionResponse> {\n\t\ttry {\n\t\t\tawait this.Service('command').execute('which docker')\n\t\t\tawait this.Service('command').execute(DISABLE_NPM_CACHE_COMMAND)\n\n\t\t\treturn {\n\t\t\t\theadline: 'Stopping cache',\n\t\t\t\tsummaryLines: ['Shutting down cache!'],\n\t\t\t}\n\t\t} catch (err: any) {\n\t\t\tlet error = err\n\t\t\tif (err.options?.cmd?.includes('which')) {\n\t\t\t\terror = new SpruceError({\n\t\t\t\t\tcode: 'MISSING_DEPENDENCIES',\n\t\t\t\t\tdependencies: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'Docker',\n\t\t\t\t\t\t\thint: 'Get Docker here: https://www.docker.com/products/docker-desktop',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t})\n\t\t\t} else if (err.message?.toLowerCase()?.includes('no such container')) {\n\t\t\t\terror = new SpruceError({\n\t\t\t\t\tcode: 'CACHE_NOT_ENABLED',\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\terror = new SpruceError({\n\t\t\t\t\tcode: 'MISSING_DEPENDENCIES',\n\t\t\t\t\tdependencies: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'Docker',\n\t\t\t\t\t\t\thint: 'Get Docker here: https://www.docker.com/products/docker-desktop',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\terrors: [error],\n\t\t\t}\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;;;;;AAEA,IAAMA,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"DisableAction.js","names":["optionsSchema","buildSchema","id","description","fields","DisableCacheAction","_options","Service","execute","DISABLE_NPM_CACHE_COMMAND","headline","summaryLines","error","options","cmd","includes","SpruceError","code","dependencies","name","hint","message","toLowerCase","errors","AbstractAction"],"sources":["../../../../src/features/cache/actions/DisableAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport { DISABLE_NPM_CACHE_COMMAND } from '../constants'\n\nconst optionsSchema = buildSchema({\n\tid: 'disableCacheAction',\n\tdescription: 'Disable caching.',\n\tfields: {},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class DisableCacheAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = [\n\t\t'disable.cache',\n\t\t'stop.cache',\n\t\t'disable.caching',\n\t\t'stop.caching',\n\t]\n\tpublic invocationMessage = 'Disabling cache...'\n\n\tpublic async execute(_options: Options): Promise<FeatureActionResponse> {\n\t\ttry {\n\t\t\tawait this.Service('command').execute('which docker')\n\t\t\tawait this.Service('command').execute(DISABLE_NPM_CACHE_COMMAND)\n\n\t\t\treturn {\n\t\t\t\theadline: 'Stopping cache',\n\t\t\t\tsummaryLines: ['Shutting down cache!'],\n\t\t\t}\n\t\t} catch (err: any) {\n\t\t\tlet error = err\n\t\t\tif (err.options?.cmd?.includes('which')) {\n\t\t\t\terror = new SpruceError({\n\t\t\t\t\tcode: 'MISSING_DEPENDENCIES',\n\t\t\t\t\tdependencies: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'Docker',\n\t\t\t\t\t\t\thint: 'Get Docker here: https://www.docker.com/products/docker-desktop',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t})\n\t\t\t} else if (err.message?.toLowerCase()?.includes('no such container')) {\n\t\t\t\terror = new SpruceError({\n\t\t\t\t\tcode: 'CACHE_NOT_ENABLED',\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\terror = new SpruceError({\n\t\t\t\t\tcode: 'MISSING_DEPENDENCIES',\n\t\t\t\t\tdependencies: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'Docker',\n\t\t\t\t\t\t\thint: 'Get Docker here: https://www.docker.com/products/docker-desktop',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t})\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\terrors: [error],\n\t\t\t}\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;;;;;AAEA,IAAMA,aAAa,GAAG,IAAAC,mBAAA,EAAY;EACjCC,EAAE,EAAE,oBAD6B;EAEjCC,WAAW,EAAE,kBAFoB;EAGjCC,MAAM,EAAE;AAHyB,CAAZ,CAAtB;;IASqBC,kB;;;;;;;;;;;;;;;sGACGL,a;uGACC,CACvB,eADuB,EAEvB,YAFuB,EAGvB,iBAHuB,EAIvB,cAJuB,C;0GAMG,oB;;;;;;;mGAE3B,iBAAqBM,QAArB;QAAA;;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA;gBAAA,OAEQ,KAAKC,OAAL,CAAa,SAAb,EAAwBC,OAAxB,CAAgC,cAAhC,CAFR;;cAAA;gBAAA;gBAAA,OAGQ,KAAKD,OAAL,CAAa,SAAb,EAAwBC,OAAxB,CAAgCC,oCAAhC,CAHR;;cAAA;gBAAA,iCAKS;kBACNC,QAAQ,EAAE,gBADJ;kBAENC,YAAY,EAAE,CAAC,sBAAD;gBAFR,CALT;;cAAA;gBAAA;gBAAA;gBAUMC,KAVN;;gBAWE,oBAAI,YAAIC,OAAR,6DAAI,aAAaC,GAAjB,6CAAI,iBAAkBC,QAAlB,CAA2B,OAA3B,CAAJ,EAAyC;kBACxCH,KAAK,GAAG,IAAII,uBAAJ,CAAgB;oBACvBC,IAAI,EAAE,sBADiB;oBAEvBC,YAAY,EAAE,CACb;sBACCC,IAAI,EAAE,QADP;sBAECC,IAAI,EAAE;oBAFP,CADa;kBAFS,CAAhB,CAAR;gBASA,CAVD,MAUO,oBAAI,YAAIC,OAAR,kEAAI,aAAaC,WAAb,EAAJ,kDAAI,sBAA4BP,QAA5B,CAAqC,mBAArC,CAAJ,EAA+D;kBACrEH,KAAK,GAAG,IAAII,uBAAJ,CAAgB;oBACvBC,IAAI,EAAE;kBADiB,CAAhB,CAAR;gBAGA,CAJM,MAIA;kBACNL,KAAK,GAAG,IAAII,uBAAJ,CAAgB;oBACvBC,IAAI,EAAE,sBADiB;oBAEvBC,YAAY,EAAE,CACb;sBACCC,IAAI,EAAE,QADP;sBAECC,IAAI,EAAE;oBAFP,CADa;kBAFS,CAAhB,CAAR;gBASA;;gBAnCH,iCAqCS;kBACNG,MAAM,EAAE,CAACX,KAAD;gBADF,CArCT;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;EAV+CY,2B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EnableAction.js","names":["optionsSchema","id","description","fields","EnableCacheAction","_options","Service","execute","Action","ENABLE_NPM_CACHE_COMMAND","headline","summaryLines","error","options","cmd","includes","SpruceError","code","dependencies","name","hint","errors","AbstractAction"],"sources":["../../../../src/features/cache/actions/EnableAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport { ENABLE_NPM_CACHE_COMMAND } from '../constants'\n\nconst optionsSchema = buildSchema({\n\tid: 'enableCacheAction',\n\tdescription: 'Enable npm caching so pulling node_modules is much faster.',\n\tfields: {},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class EnableCacheAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = [\n\t\t'enable.cache',\n\t\t'start.cache',\n\t\t'enable.caching',\n\t\t'start.caching',\n\t]\n\tpublic invocationMessage = 'Enabling cache... 💪'\n\n\tpublic async execute(_options: Options): Promise<FeatureActionResponse> {\n\t\ttry {\n\t\t\tawait this.Service('command').execute('which docker')\n\n\t\t\tawait this.Action('cache', 'disable').execute({})\n\t\t\tawait this.Service('command').execute(ENABLE_NPM_CACHE_COMMAND)\n\n\t\t\treturn {\n\t\t\t\theadline: 'Starting cache',\n\t\t\t\tsummaryLines: ['Booting cache systems now. Give it a sec!'],\n\t\t\t}\n\t\t} catch (err: any) {\n\t\t\tlet error = err\n\t\t\tif (err.options?.cmd?.includes('which')) {\n\t\t\t\terror = new SpruceError({\n\t\t\t\t\tcode: 'MISSING_DEPENDENCIES',\n\t\t\t\t\tdependencies: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'Docker',\n\t\t\t\t\t\t\thint: 'Get Docker here: https://www.docker.com/products/docker-desktop',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\terror = new SpruceError({ code: 'DOCKER_NOT_STARTED' })\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\terrors: [error],\n\t\t\t}\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;;;;;AAEA,IAAMA,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"EnableAction.js","names":["optionsSchema","buildSchema","id","description","fields","EnableCacheAction","_options","Service","execute","Action","ENABLE_NPM_CACHE_COMMAND","headline","summaryLines","error","options","cmd","includes","SpruceError","code","dependencies","name","hint","errors","AbstractAction"],"sources":["../../../../src/features/cache/actions/EnableAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport { ENABLE_NPM_CACHE_COMMAND } from '../constants'\n\nconst optionsSchema = buildSchema({\n\tid: 'enableCacheAction',\n\tdescription: 'Enable npm caching so pulling node_modules is much faster.',\n\tfields: {},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class EnableCacheAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = [\n\t\t'enable.cache',\n\t\t'start.cache',\n\t\t'enable.caching',\n\t\t'start.caching',\n\t]\n\tpublic invocationMessage = 'Enabling cache... 💪'\n\n\tpublic async execute(_options: Options): Promise<FeatureActionResponse> {\n\t\ttry {\n\t\t\tawait this.Service('command').execute('which docker')\n\n\t\t\tawait this.Action('cache', 'disable').execute({})\n\t\t\tawait this.Service('command').execute(ENABLE_NPM_CACHE_COMMAND)\n\n\t\t\treturn {\n\t\t\t\theadline: 'Starting cache',\n\t\t\t\tsummaryLines: ['Booting cache systems now. Give it a sec!'],\n\t\t\t}\n\t\t} catch (err: any) {\n\t\t\tlet error = err\n\t\t\tif (err.options?.cmd?.includes('which')) {\n\t\t\t\terror = new SpruceError({\n\t\t\t\t\tcode: 'MISSING_DEPENDENCIES',\n\t\t\t\t\tdependencies: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: 'Docker',\n\t\t\t\t\t\t\thint: 'Get Docker here: https://www.docker.com/products/docker-desktop',\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\terror = new SpruceError({ code: 'DOCKER_NOT_STARTED' })\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\terrors: [error],\n\t\t\t}\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;;;;;AAEA,IAAMA,aAAa,GAAG,IAAAC,mBAAA,EAAY;EACjCC,EAAE,EAAE,mBAD6B;EAEjCC,WAAW,EAAE,4DAFoB;EAGjCC,MAAM,EAAE;AAHyB,CAAZ,CAAtB;;IASqBC,iB;;;;;;;;;;;;;;;sGACGL,a;uGACC,CACvB,cADuB,EAEvB,aAFuB,EAGvB,gBAHuB,EAIvB,eAJuB,C;0GAMG,sB;;;;;;;mGAE3B,iBAAqBM,QAArB;QAAA;;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA;gBAAA,OAEQ,KAAKC,OAAL,CAAa,SAAb,EAAwBC,OAAxB,CAAgC,cAAhC,CAFR;;cAAA;gBAAA;gBAAA,OAIQ,KAAKC,MAAL,CAAY,OAAZ,EAAqB,SAArB,EAAgCD,OAAhC,CAAwC,EAAxC,CAJR;;cAAA;gBAAA;gBAAA,OAKQ,KAAKD,OAAL,CAAa,SAAb,EAAwBC,OAAxB,CAAgCE,mCAAhC,CALR;;cAAA;gBAAA,iCAOS;kBACNC,QAAQ,EAAE,gBADJ;kBAENC,YAAY,EAAE,CAAC,2CAAD;gBAFR,CAPT;;cAAA;gBAAA;gBAAA;gBAYMC,KAZN;;gBAaE,oBAAI,YAAIC,OAAR,6DAAI,aAAaC,GAAjB,6CAAI,iBAAkBC,QAAlB,CAA2B,OAA3B,CAAJ,EAAyC;kBACxCH,KAAK,GAAG,IAAII,uBAAJ,CAAgB;oBACvBC,IAAI,EAAE,sBADiB;oBAEvBC,YAAY,EAAE,CACb;sBACCC,IAAI,EAAE,QADP;sBAECC,IAAI,EAAE;oBAFP,CADa;kBAFS,CAAhB,CAAR;gBASA,CAVD,MAUO;kBACNR,KAAK,GAAG,IAAII,uBAAJ,CAAgB;oBAAEC,IAAI,EAAE;kBAAR,CAAhB,CAAR;gBACA;;gBAzBH,iCA2BS;kBACNI,MAAM,EAAE,CAACT,KAAD;gBADF,CA3BT;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;EAV8CU,2B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationFeature.js","names":["ConversationFeature","options","code","isRequired","name","isDev","diskUtil","resolvePath","__dirname","emitter","on","handleWillExecute","bind","payload","featureInstaller","isInstalled","featureCode","actionCode","writePlugin","files","Writer","cwd","AbstractFeature"],"sources":["../../../src/features/conversation/ConversationFeature.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { NpmPackage } from '../../types/cli.types'\nimport AbstractFeature, {\n\tFeatureDependency,\n\tFeatureOptions,\n\tInstallResults,\n} from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tconversation: ConversationFeature\n\t}\n}\n\nexport default class ConversationFeature extends AbstractFeature {\n\tpublic nameReadable = 'Conversation'\n\tpublic code: FeatureCode = 'conversation'\n\tpublic description = 'Computers like to talk, too.'\n\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{ code: 'event', isRequired: true },\n\t]\n\tpublic packageDependencies: NpmPackage[] = [\n\t\t{\n\t\t\tname: '@sprucelabs/spruce-conversation-plugin@latest',\n\t\t\tisDev: false,\n\t\t},\n\t]\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic constructor(options: FeatureOptions) {\n\t\tsuper(options)\n\n\t\tvoid this.emitter.on(\n\t\t\t'feature.will-execute',\n\t\t\tthis.handleWillExecute.bind(this)\n\t\t)\n\t}\n\n\tprivate async handleWillExecute(payload: {\n\t\tactionCode: string\n\t\tfeatureCode: string\n\t}) {\n\t\tconst isInstalled = await this.featureInstaller.isInstalled('conversation')\n\n\t\tif (\n\t\t\tpayload.featureCode === 'node' &&\n\t\t\tpayload.actionCode === 'upgrade' &&\n\t\t\tisInstalled\n\t\t) {\n\t\t\tconst files = await this.writePlugin()\n\t\t\treturn { files }\n\t\t}\n\n\t\treturn {}\n\t}\n\n\tpublic async afterPackageInstall(): Promise<InstallResults> {\n\t\tconst files = await this.writePlugin()\n\n\t\treturn {\n\t\t\tfiles,\n\t\t}\n\t}\n\n\tprivate async writePlugin() {\n\t\treturn this.Writer('conversation').writePlugin(this.cwd)\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;IAaqBA,mB;;;;;EAgBpB,6BAAmBC,OAAnB,EAA4C;IAAA;;IAAA;IAC3C,0BAAMA,OAAN;IAD2C,iGAftB,cAesB;IAAA,yFAdjB,cAciB;IAAA,gGAbvB,8BAauB;IAAA,iGAXD,CAC1C;MAAEC,IAAI,EAAE,OAAR;MAAiBC,UAAU,EAAE;IAA7B,CAD0C,CAWC;IAAA,wGARD,CAC1C;MACCC,IAAI,EAAE,+CADP;MAECC,KAAK,EAAE;IAFR,CAD0C,CAQC;IAAA,+FAFxBC,
|
|
1
|
+
{"version":3,"file":"ConversationFeature.js","names":["ConversationFeature","options","code","isRequired","name","isDev","diskUtil","resolvePath","__dirname","emitter","on","handleWillExecute","bind","payload","featureInstaller","isInstalled","featureCode","actionCode","writePlugin","files","Writer","cwd","AbstractFeature"],"sources":["../../../src/features/conversation/ConversationFeature.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { NpmPackage } from '../../types/cli.types'\nimport AbstractFeature, {\n\tFeatureDependency,\n\tFeatureOptions,\n\tInstallResults,\n} from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tconversation: ConversationFeature\n\t}\n}\n\nexport default class ConversationFeature extends AbstractFeature {\n\tpublic nameReadable = 'Conversation'\n\tpublic code: FeatureCode = 'conversation'\n\tpublic description = 'Computers like to talk, too.'\n\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{ code: 'event', isRequired: true },\n\t]\n\tpublic packageDependencies: NpmPackage[] = [\n\t\t{\n\t\t\tname: '@sprucelabs/spruce-conversation-plugin@latest',\n\t\t\tisDev: false,\n\t\t},\n\t]\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic constructor(options: FeatureOptions) {\n\t\tsuper(options)\n\n\t\tvoid this.emitter.on(\n\t\t\t'feature.will-execute',\n\t\t\tthis.handleWillExecute.bind(this)\n\t\t)\n\t}\n\n\tprivate async handleWillExecute(payload: {\n\t\tactionCode: string\n\t\tfeatureCode: string\n\t}) {\n\t\tconst isInstalled = await this.featureInstaller.isInstalled('conversation')\n\n\t\tif (\n\t\t\tpayload.featureCode === 'node' &&\n\t\t\tpayload.actionCode === 'upgrade' &&\n\t\t\tisInstalled\n\t\t) {\n\t\t\tconst files = await this.writePlugin()\n\t\t\treturn { files }\n\t\t}\n\n\t\treturn {}\n\t}\n\n\tpublic async afterPackageInstall(): Promise<InstallResults> {\n\t\tconst files = await this.writePlugin()\n\n\t\treturn {\n\t\t\tfiles,\n\t\t}\n\t}\n\n\tprivate async writePlugin() {\n\t\treturn this.Writer('conversation').writePlugin(this.cwd)\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;IAaqBA,mB;;;;;EAgBpB,6BAAmBC,OAAnB,EAA4C;IAAA;;IAAA;IAC3C,0BAAMA,OAAN;IAD2C,iGAftB,cAesB;IAAA,yFAdjB,cAciB;IAAA,gGAbvB,8BAauB;IAAA,iGAXD,CAC1C;MAAEC,IAAI,EAAE,OAAR;MAAiBC,UAAU,EAAE;IAA7B,CAD0C,CAWC;IAAA,wGARD,CAC1C;MACCC,IAAI,EAAE,+CADP;MAECC,KAAK,EAAE;IAFR,CAD0C,CAQC;IAAA,+FAFxBC,0BAAA,CAASC,WAAT,CAAqBC,SAArB,EAAgC,SAAhC,CAEwB;IAG3C,KAAK,MAAKC,OAAL,CAAaC,EAAb,CACJ,sBADI,EAEJ,MAAKC,iBAAL,CAAuBC,IAAvB,gDAFI,CAAL;IAH2C;EAO3C;;;;;6GAED,iBAAgCC,OAAhC;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OAI2B,KAAKC,gBAAL,CAAsBC,WAAtB,CAAkC,cAAlC,CAJ3B;;cAAA;gBAIOA,WAJP;;gBAAA,MAOEF,OAAO,CAACG,WAAR,KAAwB,MAAxB,IACAH,OAAO,CAACI,UAAR,KAAuB,SADvB,IAEAF,WATF;kBAAA;kBAAA;gBAAA;;gBAAA;gBAAA,OAWsB,KAAKG,WAAL,EAXtB;;cAAA;gBAWQC,KAXR;gBAAA,iCAYS;kBAAEA,KAAK,EAALA;gBAAF,CAZT;;cAAA;gBAAA,iCAeQ,EAfR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;;+GAkBA;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACqB,KAAKD,WAAL,EADrB;;cAAA;gBACOC,KADP;gBAAA,kCAGQ;kBACNA,KAAK,EAALA;gBADM,CAHR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;;uGAQA;QAAA;UAAA;YAAA;cAAA;gBAAA,kCACQ,KAAKC,MAAL,CAAY,cAAZ,EAA4BF,WAA5B,CAAwC,KAAKG,GAA7C,CADR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;EAnDgDC,4B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestAction.js","names":["optionsSchema","id","description","fields","shouldReturnImmediately","type","isPrivate","shouldRunSilently","TestAction","options","validateAndNormalizeOptions","ui","startLoading","command","Service","isWriting","promise","Promise","resolve","reject","execute","spawnOptions","undefined","stdio","process","stdin","onData","data","search","clear","stopLoading","stdout","write","replace","onError","includes","env","ACTION","then","killHandler","kill","bind","meta","pid","stderr","code","summaryLines","errors","AbstractAction"],"sources":["../../../../src/features/conversation/actions/TestAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'testConversationOptions',\n\tdescription: 'Test your conversation topics.',\n\tfields: {\n\t\tshouldReturnImmediately: {\n\t\t\ttype: 'boolean',\n\t\t\tisPrivate: true,\n\t\t},\n\t\tshouldRunSilently: {\n\t\t\ttype: 'boolean',\n\t\t\tisPrivate: true,\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\nexport default class TestAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = ['test.conversation', 'chat']\n\tpublic invocationMessage = \"Let's test talking about topics... 🎙\"\n\n\tprivate killHandler?: () => void\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst { shouldReturnImmediately, shouldRunSilently } =\n\t\t\tthis.validateAndNormalizeOptions(options)\n\n\t\tthis.ui.startLoading('Booting skill...')\n\n\t\ttry {\n\t\t\tconst command = this.Service('command')\n\t\t\tlet isWriting = false\n\n\t\t\tconst promise = new Promise((resolve, reject) => {\n\t\t\t\tcommand\n\t\t\t\t\t.execute('yarn boot.local', {\n\t\t\t\t\t\tspawnOptions: shouldRunSilently\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tstdio: [process.stdin, 'pipe', 'pipe'],\n\t\t\t\t\t\t\t },\n\n\t\t\t\t\t\tonData: shouldRunSilently\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: async (data) => {\n\t\t\t\t\t\t\t\t\tif (!isWriting) {\n\t\t\t\t\t\t\t\t\t\tisWriting = data.search(':: Skill booted') > -1\n\t\t\t\t\t\t\t\t\t\tif (isWriting) {\n\t\t\t\t\t\t\t\t\t\t\tthis.ui.clear()\n\t\t\t\t\t\t\t\t\t\t\tthis.ui.stopLoading()\n\t\t\t\t\t\t\t\t\t\t\tprocess.stdout?.write(\n\t\t\t\t\t\t\t\t\t\t\t\t'? Send your first message to kick-off the conversation: '\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else if (isWriting) {\n\t\t\t\t\t\t\t\t\t\tprocess.stdout?.write(\n\t\t\t\t\t\t\t\t\t\t\tdata.replace('Skill :: Skill booted', '')\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t },\n\t\t\t\t\t\tonError: (data) => {\n\t\t\t\t\t\t\tif (!data.includes('warning package.json')) {\n\t\t\t\t\t\t\t\t// const err = new SpruceError({\n\t\t\t\t\t\t\t\t// \tfriendlyMessage:\n\t\t\t\t\t\t\t\t// \t\t`Testing conversations failed because of the following error:\\n\\n` +\n\t\t\t\t\t\t\t\t// \t\tdata,\n\t\t\t\t\t\t\t\t// \tcode: 'EXECUTING_COMMAND_FAILED',\n\t\t\t\t\t\t\t\t// \tcmd: 'ACTION=test.conversation yarn.boot.local',\n\t\t\t\t\t\t\t\t// \tstderr: data,\n\t\t\t\t\t\t\t\t// })\n\t\t\t\t\t\t\t\t// reject(err)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tenv: {\n\t\t\t\t\t\t\tACTION: 'test.conversation',\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\t.then(resolve)\n\t\t\t\t\t.catch(reject)\n\t\t\t})\n\n\t\t\tthis.killHandler = command.kill.bind(command)\n\n\t\t\tif (shouldReturnImmediately) {\n\t\t\t\treturn {\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tkill: this.killHandler,\n\t\t\t\t\t\tpid: command.pid() as number,\n\t\t\t\t\t\tpromise,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tawait promise\n\t\t\t}\n\t\t} catch (err: any) {\n\t\t\tif (\n\t\t\t\terr.options?.stderr?.includes('SIGINT') ||\n\t\t\t\terr.options?.code === 'CONVERSATION_ABORTED'\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\tsummaryLines: ['Conversation terminated. ✌️'],\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\terrors: [err],\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tsummaryLines: ['Talk soon! 👋'],\n\t\t}\n\t}\n\n\tpublic async kill() {\n\t\tthis.killHandler?.()\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;AAGA,IAAMA,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"TestAction.js","names":["optionsSchema","buildSchema","id","description","fields","shouldReturnImmediately","type","isPrivate","shouldRunSilently","TestAction","options","validateAndNormalizeOptions","ui","startLoading","command","Service","isWriting","promise","Promise","resolve","reject","execute","spawnOptions","undefined","stdio","process","stdin","onData","data","search","clear","stopLoading","stdout","write","replace","onError","includes","env","ACTION","then","killHandler","kill","bind","meta","pid","stderr","code","summaryLines","errors","AbstractAction"],"sources":["../../../../src/features/conversation/actions/TestAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'testConversationOptions',\n\tdescription: 'Test your conversation topics.',\n\tfields: {\n\t\tshouldReturnImmediately: {\n\t\t\ttype: 'boolean',\n\t\t\tisPrivate: true,\n\t\t},\n\t\tshouldRunSilently: {\n\t\t\ttype: 'boolean',\n\t\t\tisPrivate: true,\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\nexport default class TestAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = ['test.conversation', 'chat']\n\tpublic invocationMessage = \"Let's test talking about topics... 🎙\"\n\n\tprivate killHandler?: () => void\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tconst { shouldReturnImmediately, shouldRunSilently } =\n\t\t\tthis.validateAndNormalizeOptions(options)\n\n\t\tthis.ui.startLoading('Booting skill...')\n\n\t\ttry {\n\t\t\tconst command = this.Service('command')\n\t\t\tlet isWriting = false\n\n\t\t\tconst promise = new Promise((resolve, reject) => {\n\t\t\t\tcommand\n\t\t\t\t\t.execute('yarn boot.local', {\n\t\t\t\t\t\tspawnOptions: shouldRunSilently\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t\tstdio: [process.stdin, 'pipe', 'pipe'],\n\t\t\t\t\t\t\t },\n\n\t\t\t\t\t\tonData: shouldRunSilently\n\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t: async (data) => {\n\t\t\t\t\t\t\t\t\tif (!isWriting) {\n\t\t\t\t\t\t\t\t\t\tisWriting = data.search(':: Skill booted') > -1\n\t\t\t\t\t\t\t\t\t\tif (isWriting) {\n\t\t\t\t\t\t\t\t\t\t\tthis.ui.clear()\n\t\t\t\t\t\t\t\t\t\t\tthis.ui.stopLoading()\n\t\t\t\t\t\t\t\t\t\t\tprocess.stdout?.write(\n\t\t\t\t\t\t\t\t\t\t\t\t'? Send your first message to kick-off the conversation: '\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else if (isWriting) {\n\t\t\t\t\t\t\t\t\t\tprocess.stdout?.write(\n\t\t\t\t\t\t\t\t\t\t\tdata.replace('Skill :: Skill booted', '')\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t },\n\t\t\t\t\t\tonError: (data) => {\n\t\t\t\t\t\t\tif (!data.includes('warning package.json')) {\n\t\t\t\t\t\t\t\t// const err = new SpruceError({\n\t\t\t\t\t\t\t\t// \tfriendlyMessage:\n\t\t\t\t\t\t\t\t// \t\t`Testing conversations failed because of the following error:\\n\\n` +\n\t\t\t\t\t\t\t\t// \t\tdata,\n\t\t\t\t\t\t\t\t// \tcode: 'EXECUTING_COMMAND_FAILED',\n\t\t\t\t\t\t\t\t// \tcmd: 'ACTION=test.conversation yarn.boot.local',\n\t\t\t\t\t\t\t\t// \tstderr: data,\n\t\t\t\t\t\t\t\t// })\n\t\t\t\t\t\t\t\t// reject(err)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tenv: {\n\t\t\t\t\t\t\tACTION: 'test.conversation',\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t\t.then(resolve)\n\t\t\t\t\t.catch(reject)\n\t\t\t})\n\n\t\t\tthis.killHandler = command.kill.bind(command)\n\n\t\t\tif (shouldReturnImmediately) {\n\t\t\t\treturn {\n\t\t\t\t\tmeta: {\n\t\t\t\t\t\tkill: this.killHandler,\n\t\t\t\t\t\tpid: command.pid() as number,\n\t\t\t\t\t\tpromise,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tawait promise\n\t\t\t}\n\t\t} catch (err: any) {\n\t\t\tif (\n\t\t\t\terr.options?.stderr?.includes('SIGINT') ||\n\t\t\t\terr.options?.code === 'CONVERSATION_ABORTED'\n\t\t\t) {\n\t\t\t\treturn {\n\t\t\t\t\tsummaryLines: ['Conversation terminated. ✌️'],\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\terrors: [err],\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tsummaryLines: ['Talk soon! 👋'],\n\t\t}\n\t}\n\n\tpublic async kill() {\n\t\tthis.killHandler?.()\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;AAGA,IAAMA,aAAa,GAAG,IAAAC,mBAAA,EAAY;EACjCC,EAAE,EAAE,yBAD6B;EAEjCC,WAAW,EAAE,gCAFoB;EAGjCC,MAAM,EAAE;IACPC,uBAAuB,EAAE;MACxBC,IAAI,EAAE,SADkB;MAExBC,SAAS,EAAE;IAFa,CADlB;IAKPC,iBAAiB,EAAE;MAClBF,IAAI,EAAE,SADY;MAElBC,SAAS,EAAE;IAFO;EALZ;AAHyB,CAAZ,CAAtB;;IAiBqBE,U;;;;;;;;;;;;;;;sGACGT,a;uGACC,CAAC,mBAAD,EAAsB,MAAtB,C;0GACG,uC;;;;;;;;mGAI3B,kBAAqBU,OAArB;QAAA;;QAAA;;QAAA;UAAA;YAAA;cAAA;gBAAA,wBAEE,KAAKC,2BAAL,CAAiCD,OAAjC,CAFF,EACSL,uBADT,yBACSA,uBADT,EACkCG,iBADlC,yBACkCA,iBADlC;gBAIC,KAAKI,EAAL,CAAQC,YAAR,CAAqB,kBAArB;gBAJD;gBAOQC,OAPR,GAOkB,KAAKC,OAAL,CAAa,SAAb,CAPlB;gBAQMC,SARN,GAQkB,KARlB;gBAUQC,OAVR,GAUkB,IAAIC,OAAJ,CAAY,UAACC,OAAD,EAAUC,MAAV,EAAqB;kBAChDN,OAAO,CACLO,OADF,CACU,iBADV,EAC6B;oBAC3BC,YAAY,EAAEd,iBAAiB,GAC5Be,SAD4B,GAE5B;sBACAC,KAAK,EAAE,CAACC,OAAO,CAACC,KAAT,EAAgB,MAAhB,EAAwB,MAAxB;oBADP,CAHwB;oBAO3BC,MAAM,EAAEnB,iBAAiB,GACtBe,SADsB;sBAAA,yFAEtB,iBAAOK,IAAP;wBAAA;;wBAAA;0BAAA;4BAAA;8BAAA;gCACA,IAAI,CAACZ,SAAL,EAAgB;kCACfA,SAAS,GAAGY,IAAI,CAACC,MAAL,CAAY,iBAAZ,IAAiC,CAAC,CAA9C;;kCACA,IAAIb,SAAJ,EAAe;oCACd,MAAI,CAACJ,EAAL,CAAQkB,KAAR;;oCACA,MAAI,CAAClB,EAAL,CAAQmB,WAAR;;oCACA,mBAAAN,OAAO,CAACO,MAAR,oEAAgBC,KAAhB,CACC,0DADD;kCAGA;gCACD,CATD,MASO,IAAIjB,SAAJ,EAAe;kCACrB,oBAAAS,OAAO,CAACO,MAAR,sEAAgBC,KAAhB,CACCL,IAAI,CAACM,OAAL,CAAa,uBAAb,EAAsC,EAAtC,CADD;gCAGA;;8BAdD;8BAAA;gCAAA;4BAAA;0BAAA;wBAAA;sBAAA,CAFsB;;sBAAA;wBAAA;sBAAA;oBAAA,GAPE;oBAyB3BC,OAAO,EAAE,iBAACP,IAAD,EAAU;sBAClB,IAAI,CAACA,IAAI,CAACQ,QAAL,CAAc,sBAAd,CAAL,EAA4C,CAC3C;wBACA;wBACA;wBACA;wBACA;wBACA;wBACA;wBACA;wBACA;sBACA;oBACD,CArC0B;oBAsC3BC,GAAG,EAAE;sBACJC,MAAM,EAAE;oBADJ;kBAtCsB,CAD7B,EA2CEC,IA3CF,CA2COpB,OA3CP,WA4CQC,MA5CR;gBA6CA,CA9Ce,CAVlB;gBA0DE,KAAKoB,WAAL,GAAmB1B,OAAO,CAAC2B,IAAR,CAAaC,IAAb,CAAkB5B,OAAlB,CAAnB;;gBA1DF,KA4DMT,uBA5DN;kBAAA;kBAAA;gBAAA;;gBAAA,kCA6DU;kBACNsC,IAAI,EAAE;oBACLF,IAAI,EAAE,KAAKD,WADN;oBAELI,GAAG,EAAE9B,OAAO,CAAC8B,GAAR,EAFA;oBAGL3B,OAAO,EAAPA;kBAHK;gBADA,CA7DV;;cAAA;gBAAA;gBAAA,OAqESA,OArET;;cAAA;gBAAA;gBAAA;;cAAA;gBAAA;gBAAA;;gBAAA,MAyEG,6BAAIP,OAAJ,6EAAamC,MAAb,oEAAqBT,QAArB,CAA8B,QAA9B,KACA,+BAAI1B,OAAJ,gEAAaoC,IAAb,MAAsB,sBA1EzB;kBAAA;kBAAA;gBAAA;;gBAAA,kCA4EU;kBACNC,YAAY,EAAE,CAAC,6BAAD;gBADR,CA5EV;;cAAA;gBAAA,kCAiFS;kBACNC,MAAM,EAAE;gBADF,CAjFT;;cAAA;gBAAA,kCAsFQ;kBACND,YAAY,EAAE,CAAC,eAAD;gBADR,CAtFR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;;gGA2FA;QAAA;;QAAA;UAAA;YAAA;cAAA;gBACC,0BAAKP,WAAL;;cADD;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;EAlGuCS,2B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationStore.js","names":["ConversationStore","connectToApi","client","emit","results","eventResponseUtil","getAllResponsePayloadsAndErrors","SpruceError","payloads","errors","topics","AbstractStore"],"sources":["../../../../src/features/conversation/stores/ConversationStore.ts"],"sourcesContent":["import { SpruceSchemas } from '@sprucelabs/mercury-types'\nimport { eventResponseUtil } from '@sprucelabs/spruce-event-utils'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractStore from '../../../stores/AbstractStore'\n\nexport interface EventStoreFetchEventContractsResponse {\n\terrors: SpruceError[]\n\ttopics: SpruceSchemas.Mercury.v2020_12_25.GetConversationTopicsTopic[]\n}\n\nexport default class ConversationStore extends AbstractStore {\n\tpublic name = 'event'\n\n\tpublic async fetchRegisteredTopics() {\n\t\tconst client = await this.connectToApi()\n\t\tconst results = await client.emit('get-conversation-topics::v2020_12_25')\n\t\tconst { payloads, errors } =\n\t\t\teventResponseUtil.getAllResponsePayloadsAndErrors(results, SpruceError)\n\n\t\tconst topics = payloads[0]?.topics ?? []\n\n\t\treturn { topics, errors }\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AACA;;AACA;;;;;;IAOqBA,iB;;;;;;;;;;;;;;;6FACN,O;;;;;;;iHAEd;QAAA;;QAAA;;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACsB,KAAKC,YAAL,EADtB;;cAAA;gBACOC,MADP;gBAAA;gBAAA,OAEuBA,MAAM,CAACC,IAAP,CAAY,sCAAZ,CAFvB;;cAAA;gBAEOC,OAFP;gBAAA,wBAIEC,
|
|
1
|
+
{"version":3,"file":"ConversationStore.js","names":["ConversationStore","connectToApi","client","emit","results","eventResponseUtil","getAllResponsePayloadsAndErrors","SpruceError","payloads","errors","topics","AbstractStore"],"sources":["../../../../src/features/conversation/stores/ConversationStore.ts"],"sourcesContent":["import { SpruceSchemas } from '@sprucelabs/mercury-types'\nimport { eventResponseUtil } from '@sprucelabs/spruce-event-utils'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractStore from '../../../stores/AbstractStore'\n\nexport interface EventStoreFetchEventContractsResponse {\n\terrors: SpruceError[]\n\ttopics: SpruceSchemas.Mercury.v2020_12_25.GetConversationTopicsTopic[]\n}\n\nexport default class ConversationStore extends AbstractStore {\n\tpublic name = 'event'\n\n\tpublic async fetchRegisteredTopics() {\n\t\tconst client = await this.connectToApi()\n\t\tconst results = await client.emit('get-conversation-topics::v2020_12_25')\n\t\tconst { payloads, errors } =\n\t\t\teventResponseUtil.getAllResponsePayloadsAndErrors(results, SpruceError)\n\n\t\tconst topics = payloads[0]?.topics ?? []\n\n\t\treturn { topics, errors }\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AACA;;AACA;;;;;;IAOqBA,iB;;;;;;;;;;;;;;;6FACN,O;;;;;;;iHAEd;QAAA;;QAAA;;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACsB,KAAKC,YAAL,EADtB;;cAAA;gBACOC,MADP;gBAAA;gBAAA,OAEuBA,MAAM,CAACC,IAAP,CAAY,sCAAZ,CAFvB;;cAAA;gBAEOC,OAFP;gBAAA,wBAIEC,mCAAA,CAAkBC,+BAAlB,CAAkDF,OAAlD,EAA2DG,uBAA3D,CAJF,EAGSC,QAHT,yBAGSA,QAHT,EAGmBC,MAHnB,yBAGmBA,MAHnB;gBAMOC,MANP,uCAMgBF,QAAQ,CAAC,CAAD,CANxB,+CAMgB,WAAaE,MAN7B,mEAMuC,EANvC;gBAAA,iCAQQ;kBAAEA,MAAM,EAANA,MAAF;kBAAUD,MAAM,EAANA;gBAAV,CARR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;EAH8CE,0B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationWriter.js","names":["ConversationWriter","destinationDir","options","nameCamel","nameReadable","filename","destination","diskUtil","resolvePath","contents","templates","conversationTopic","writeFile","lint","file","name","path","action","description","toLowerCase","cwd","resolveHashSprucePath","pluginContents","conversationPlugin","results","writeFileIfChangedMixinResults","AbstractWriter"],"sources":["../../../../src/features/conversation/writers/ConversationWriter.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { GeneratedFile } from '../../../types/cli.types'\nimport AbstractWriter from '../../../writers/AbstractWriter'\n\nexport default class ConversationWriter extends AbstractWriter {\n\tpublic async writeDefinition(\n\t\tdestinationDir: string,\n\t\toptions: { nameCamel: string; nameReadable: string }\n\t) {\n\t\tconst { nameCamel, nameReadable } = options\n\n\t\tconst filename = `${nameCamel}.topic.ts`\n\t\tconst destination = diskUtil.resolvePath(\n\t\t\tdestinationDir,\n\t\t\t'src',\n\t\t\t'conversations',\n\t\t\tfilename\n\t\t)\n\n\t\tconst contents = this.templates.conversationTopic({ nameReadable })\n\n\t\tdiskUtil.writeFile(destination, contents)\n\n\t\tawait this.lint(destination)\n\n\t\tconst file: GeneratedFile = {\n\t\t\tname: filename,\n\t\t\tpath: destination,\n\t\t\taction: 'generated',\n\t\t\tdescription: `The definition talking about ${nameReadable.toLowerCase()}`,\n\t\t}\n\t\treturn file\n\t}\n\n\tpublic writePlugin(cwd: string) {\n\t\tconst destination = diskUtil.resolveHashSprucePath(\n\t\t\tcwd,\n\t\t\t'features',\n\t\t\t'conversation.plugin.ts'\n\t\t)\n\n\t\tconst pluginContents = this.templates.conversationPlugin()\n\n\t\tconst results = this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tpluginContents,\n\t\t\t'Supports your skill with having conversations.'\n\t\t)\n\n\t\treturn results\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;IAEqBA,kB;;;;;;;;;;;;;2GACpB,iBACCC,cADD,EAECC,OAFD;QAAA;QAAA;UAAA;YAAA;cAAA;gBAISC,SAJT,GAIqCD,OAJrC,CAISC,SAJT,EAIoBC,YAJpB,GAIqCF,OAJrC,CAIoBE,YAJpB;gBAMOC,QANP,aAMqBF,SANrB;gBAOOG,WAPP,GAOqBC,
|
|
1
|
+
{"version":3,"file":"ConversationWriter.js","names":["ConversationWriter","destinationDir","options","nameCamel","nameReadable","filename","destination","diskUtil","resolvePath","contents","templates","conversationTopic","writeFile","lint","file","name","path","action","description","toLowerCase","cwd","resolveHashSprucePath","pluginContents","conversationPlugin","results","writeFileIfChangedMixinResults","AbstractWriter"],"sources":["../../../../src/features/conversation/writers/ConversationWriter.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { GeneratedFile } from '../../../types/cli.types'\nimport AbstractWriter from '../../../writers/AbstractWriter'\n\nexport default class ConversationWriter extends AbstractWriter {\n\tpublic async writeDefinition(\n\t\tdestinationDir: string,\n\t\toptions: { nameCamel: string; nameReadable: string }\n\t) {\n\t\tconst { nameCamel, nameReadable } = options\n\n\t\tconst filename = `${nameCamel}.topic.ts`\n\t\tconst destination = diskUtil.resolvePath(\n\t\t\tdestinationDir,\n\t\t\t'src',\n\t\t\t'conversations',\n\t\t\tfilename\n\t\t)\n\n\t\tconst contents = this.templates.conversationTopic({ nameReadable })\n\n\t\tdiskUtil.writeFile(destination, contents)\n\n\t\tawait this.lint(destination)\n\n\t\tconst file: GeneratedFile = {\n\t\t\tname: filename,\n\t\t\tpath: destination,\n\t\t\taction: 'generated',\n\t\t\tdescription: `The definition talking about ${nameReadable.toLowerCase()}`,\n\t\t}\n\t\treturn file\n\t}\n\n\tpublic writePlugin(cwd: string) {\n\t\tconst destination = diskUtil.resolveHashSprucePath(\n\t\t\tcwd,\n\t\t\t'features',\n\t\t\t'conversation.plugin.ts'\n\t\t)\n\n\t\tconst pluginContents = this.templates.conversationPlugin()\n\n\t\tconst results = this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tpluginContents,\n\t\t\t'Supports your skill with having conversations.'\n\t\t)\n\n\t\treturn results\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;IAEqBA,kB;;;;;;;;;;;;;2GACpB,iBACCC,cADD,EAECC,OAFD;QAAA;QAAA;UAAA;YAAA;cAAA;gBAISC,SAJT,GAIqCD,OAJrC,CAISC,SAJT,EAIoBC,YAJpB,GAIqCF,OAJrC,CAIoBE,YAJpB;gBAMOC,QANP,aAMqBF,SANrB;gBAOOG,WAPP,GAOqBC,0BAAA,CAASC,WAAT,CACnBP,cADmB,EAEnB,KAFmB,EAGnB,eAHmB,EAInBI,QAJmB,CAPrB;gBAcOI,QAdP,GAckB,KAAKC,SAAL,CAAeC,iBAAf,CAAiC;kBAAEP,YAAY,EAAZA;gBAAF,CAAjC,CAdlB;;gBAgBCG,0BAAA,CAASK,SAAT,CAAmBN,WAAnB,EAAgCG,QAAhC;;gBAhBD;gBAAA,OAkBO,KAAKI,IAAL,CAAUP,WAAV,CAlBP;;cAAA;gBAoBOQ,IApBP,GAoB6B;kBAC3BC,IAAI,EAAEV,QADqB;kBAE3BW,IAAI,EAAEV,WAFqB;kBAG3BW,MAAM,EAAE,WAHmB;kBAI3BC,WAAW,yCAAkCd,YAAY,CAACe,WAAb,EAAlC;gBAJgB,CApB7B;gBAAA,iCA0BQL,IA1BR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;WA6BA,qBAAmBM,GAAnB,EAAgC;MAC/B,IAAMd,WAAW,GAAGC,0BAAA,CAASc,qBAAT,CACnBD,GADmB,EAEnB,UAFmB,EAGnB,wBAHmB,CAApB;;MAMA,IAAME,cAAc,GAAG,KAAKZ,SAAL,CAAea,kBAAf,EAAvB;MAEA,IAAMC,OAAO,GAAG,KAAKC,8BAAL,CACfnB,WADe,EAEfgB,cAFe,EAGf,gDAHe,CAAhB;MAMA,OAAOE,OAAP;IACA;;;EA9C8CE,2B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DependencyFeature.js","names":["DependencyFeature","diskUtil","resolvePath","__dirname","code","isRequired","featureInstaller","isInstalled","AbstractFeature"],"sources":["../../../src/features/dependencies/DependencyFeature.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport AbstractFeature, { FeatureDependency } from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tdependency: DependencyFeature\n\t}\n}\n\nexport default class DependencyFeature extends AbstractFeature {\n\tpublic description = 'Tell me which skills you depend on.'\n\tpublic code: FeatureCode = 'dependency'\n\tpublic nameReadable = 'Dependencies'\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{\n\t\t\tcode: 'skill',\n\t\t\tisRequired: true,\n\t\t},\n\t]\n\tpublic packageDependencies = []\n\n\tpublic async isInstalled() {\n\t\treturn this.featureInstaller.isInstalled('skill')\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;IASqBA,iB;;;;;;;;;;;;;;;oGACC,qC;6FACM,Y;qGACL,c;mGACFC,
|
|
1
|
+
{"version":3,"file":"DependencyFeature.js","names":["DependencyFeature","diskUtil","resolvePath","__dirname","code","isRequired","featureInstaller","isInstalled","AbstractFeature"],"sources":["../../../src/features/dependencies/DependencyFeature.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport AbstractFeature, { FeatureDependency } from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tdependency: DependencyFeature\n\t}\n}\n\nexport default class DependencyFeature extends AbstractFeature {\n\tpublic description = 'Tell me which skills you depend on.'\n\tpublic code: FeatureCode = 'dependency'\n\tpublic nameReadable = 'Dependencies'\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{\n\t\t\tcode: 'skill',\n\t\t\tisRequired: true,\n\t\t},\n\t]\n\tpublic packageDependencies = []\n\n\tpublic async isInstalled() {\n\t\treturn this.featureInstaller.isInstalled('skill')\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;IASqBA,iB;;;;;;;;;;;;;;;oGACC,qC;6FACM,Y;qGACL,c;mGACFC,0BAAA,CAASC,WAAT,CAAqBC,SAArB,EAAgC,SAAhC,C;qGACuB,CAC1C;MACCC,IAAI,EAAE,OADP;MAECC,UAAU,EAAE;IAFb,CAD0C,C;4GAMd,E;;;;;;;uGAE7B;QAAA;UAAA;YAAA;cAAA;gBAAA,iCACQ,KAAKC,gBAAL,CAAsBC,WAAtB,CAAkC,OAAlC,CADR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;EAb8CC,4B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AddAction.js","names":["optionsSchema","id","description","fields","namespace","type","label","hint","DeployAction","options","validateAndNormalizeOptions","Store","fetchAllSkills","skills","dependencyService","Service","dependencies","get","map","d","choices","filter","s","indexOf","slug","value","name","ui","prompt","isRequired","skill","find","SpruceError","code","friendlyMessage","add","summaryLines","AbstractAction"],"sources":["../../../../src/features/dependencies/actions/AddAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'addDepnedency',\n\tdescription: 'Add a skill as a dependency.',\n\tfields: {\n\t\tnamespace: {\n\t\t\ttype: 'id',\n\t\t\tlabel: 'Namespace',\n\t\t\thint: 'The namespace of the skill you want to add as a dependency.',\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class DeployAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = ['add.dependency [namespace]']\n\tpublic invocationMessage = 'Adding a dependency... 🔗'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tlet { namespace } = this.validateAndNormalizeOptions(options)\n\n\t\tconst skills = await this.Store('skill').fetchAllSkills()\n\t\tconst dependencyService = this.Service('dependency')\n\n\t\tif (!namespace) {\n\t\t\tconst dependencies = dependencyService.get().map((d) => d.namespace)\n\n\t\t\tconst choices = skills\n\t\t\t\t.filter((s) => dependencies.indexOf(s.slug) === -1)\n\t\t\t\t.map((s) => ({\n\t\t\t\t\tvalue: s.slug,\n\t\t\t\t\tlabel: s.name,\n\t\t\t\t}))\n\n\t\t\tnamespace = await this.ui.prompt({\n\t\t\t\ttype: 'select',\n\t\t\t\tlabel: 'Which skill would you like to add as a dependency?',\n\t\t\t\tisRequired: true,\n\t\t\t\toptions: {\n\t\t\t\t\tchoices,\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\n\t\tconst skill = skills.find((s) => s.slug === namespace)\n\n\t\tif (!skill) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'SKILL_NOT_FOUND',\n\t\t\t\tfriendlyMessage: `I could not find a skill with the slug of ${namespace}.`,\n\t\t\t})\n\t\t}\n\n\t\tdependencyService.add({\n\t\t\tid: skill.id,\n\t\t\tnamespace: skill.slug,\n\t\t})\n\n\t\treturn {\n\t\t\tsummaryLines: [`Added \"${skill.name}\" as a dependency!`],\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;AAGA,IAAMA,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"AddAction.js","names":["optionsSchema","buildSchema","id","description","fields","namespace","type","label","hint","DeployAction","options","validateAndNormalizeOptions","Store","fetchAllSkills","skills","dependencyService","Service","dependencies","get","map","d","choices","filter","s","indexOf","slug","value","name","ui","prompt","isRequired","skill","find","SpruceError","code","friendlyMessage","add","summaryLines","AbstractAction"],"sources":["../../../../src/features/dependencies/actions/AddAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'addDepnedency',\n\tdescription: 'Add a skill as a dependency.',\n\tfields: {\n\t\tnamespace: {\n\t\t\ttype: 'id',\n\t\t\tlabel: 'Namespace',\n\t\t\thint: 'The namespace of the skill you want to add as a dependency.',\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class DeployAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = ['add.dependency [namespace]']\n\tpublic invocationMessage = 'Adding a dependency... 🔗'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tlet { namespace } = this.validateAndNormalizeOptions(options)\n\n\t\tconst skills = await this.Store('skill').fetchAllSkills()\n\t\tconst dependencyService = this.Service('dependency')\n\n\t\tif (!namespace) {\n\t\t\tconst dependencies = dependencyService.get().map((d) => d.namespace)\n\n\t\t\tconst choices = skills\n\t\t\t\t.filter((s) => dependencies.indexOf(s.slug) === -1)\n\t\t\t\t.map((s) => ({\n\t\t\t\t\tvalue: s.slug,\n\t\t\t\t\tlabel: s.name,\n\t\t\t\t}))\n\n\t\t\tnamespace = await this.ui.prompt({\n\t\t\t\ttype: 'select',\n\t\t\t\tlabel: 'Which skill would you like to add as a dependency?',\n\t\t\t\tisRequired: true,\n\t\t\t\toptions: {\n\t\t\t\t\tchoices,\n\t\t\t\t},\n\t\t\t})\n\t\t}\n\n\t\tconst skill = skills.find((s) => s.slug === namespace)\n\n\t\tif (!skill) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'SKILL_NOT_FOUND',\n\t\t\t\tfriendlyMessage: `I could not find a skill with the slug of ${namespace}.`,\n\t\t\t})\n\t\t}\n\n\t\tdependencyService.add({\n\t\t\tid: skill.id,\n\t\t\tnamespace: skill.slug,\n\t\t})\n\n\t\treturn {\n\t\t\tsummaryLines: [`Added \"${skill.name}\" as a dependency!`],\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;AAGA,IAAMA,aAAa,GAAG,IAAAC,mBAAA,EAAY;EACjCC,EAAE,EAAE,eAD6B;EAEjCC,WAAW,EAAE,8BAFoB;EAGjCC,MAAM,EAAE;IACPC,SAAS,EAAE;MACVC,IAAI,EAAE,IADI;MAEVC,KAAK,EAAE,WAFG;MAGVC,IAAI,EAAE;IAHI;EADJ;AAHyB,CAAZ,CAAtB;;IAeqBC,Y;;;;;;;;;;;;;;;sGACGT,a;uGACC,CAAC,4BAAD,C;0GACG,2B;;;;;;;mGAE3B,iBAAqBU,OAArB;QAAA;;QAAA;UAAA;YAAA;cAAA;gBAAA,wBACqB,KAAKC,2BAAL,CAAiCD,OAAjC,CADrB,EACOL,SADP,yBACOA,SADP;gBAAA;gBAAA,OAGsB,KAAKO,KAAL,CAAW,OAAX,EAAoBC,cAApB,EAHtB;;cAAA;gBAGOC,MAHP;gBAIOC,iBAJP,GAI2B,KAAKC,OAAL,CAAa,YAAb,CAJ3B;;gBAAA,IAMMX,SANN;kBAAA;kBAAA;gBAAA;;gBAOQY,YAPR,GAOuBF,iBAAiB,CAACG,GAAlB,GAAwBC,GAAxB,CAA4B,UAACC,CAAD;kBAAA,OAAOA,CAAC,CAACf,SAAT;gBAAA,CAA5B,CAPvB;gBASQgB,OATR,GASkBP,MAAM,CACpBQ,MADc,CACP,UAACC,CAAD;kBAAA,OAAON,YAAY,CAACO,OAAb,CAAqBD,CAAC,CAACE,IAAvB,MAAiC,CAAC,CAAzC;gBAAA,CADO,EAEdN,GAFc,CAEV,UAACI,CAAD;kBAAA,OAAQ;oBACZG,KAAK,EAAEH,CAAC,CAACE,IADG;oBAEZlB,KAAK,EAAEgB,CAAC,CAACI;kBAFG,CAAR;gBAAA,CAFU,CATlB;gBAAA;gBAAA,OAgBoB,KAAKC,EAAL,CAAQC,MAAR,CAAe;kBAChCvB,IAAI,EAAE,QAD0B;kBAEhCC,KAAK,EAAE,oDAFyB;kBAGhCuB,UAAU,EAAE,IAHoB;kBAIhCpB,OAAO,EAAE;oBACRW,OAAO,EAAPA;kBADQ;gBAJuB,CAAf,CAhBpB;;cAAA;gBAgBEhB,SAhBF;;cAAA;gBA0BO0B,KA1BP,GA0BejB,MAAM,CAACkB,IAAP,CAAY,UAACT,CAAD;kBAAA,OAAOA,CAAC,CAACE,IAAF,KAAWpB,SAAlB;gBAAA,CAAZ,CA1Bf;;gBAAA,IA4BM0B,KA5BN;kBAAA;kBAAA;gBAAA;;gBAAA,MA6BQ,IAAIE,uBAAJ,CAAgB;kBACrBC,IAAI,EAAE,iBADe;kBAErBC,eAAe,sDAA+C9B,SAA/C;gBAFM,CAAhB,CA7BR;;cAAA;gBAmCCU,iBAAiB,CAACqB,GAAlB,CAAsB;kBACrBlC,EAAE,EAAE6B,KAAK,CAAC7B,EADW;kBAErBG,SAAS,EAAE0B,KAAK,CAACN;gBAFI,CAAtB;gBAnCD,iCAwCQ;kBACNY,YAAY,EAAE,mBAAWN,KAAK,CAACJ,IAAjB;gBADR,CAxCR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;EALyCW,2B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ManageAction.js","names":["optionsSchema","id","description","fields","DeployAction","Store","fetchMySkills","skills","sort","a","b","name1","name","toLowerCase","name2","dep","Service","dependencies","get","loadCurrentSkill","currentSkill","isRegistered","filter","s","ui","prompt","label","type","isArray","isRequired","value","map","d","options","choices","skill","slug","selected","summary","updatedDependencies","find","push","namespace","set","summaryLines","length","AbstractAction"],"sources":["../../../../src/features/dependencies/actions/ManageAction.ts"],"sourcesContent":["import { buildSchema } from '@sprucelabs/schema'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'manageDependencies',\n\tdescription: 'Manage the skills you depend on.',\n\tfields: {},\n})\n\ntype OptionsSchema = typeof optionsSchema\n\nexport default class DeployAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = [\n\t\t'manage.dependencies',\n\t\t'remove.dependency',\n\t\t'dependencies',\n\t]\n\tpublic invocationMessage = 'Managing dependencies... 🔗'\n\n\tpublic async execute(): Promise<FeatureActionResponse> {\n\t\tlet skills = await this.Store('skill').fetchMySkills()\n\t\tskills.sort((a, b) => {\n\t\t\tconst name1 = a.name.toLowerCase()\n\t\t\tconst name2 = b.name.toLowerCase()\n\n\t\t\tif (name1 < name2) {\n\t\t\t\treturn -1\n\t\t\t} else if (name1 > name2) {\n\t\t\t\treturn 1\n\t\t\t}\n\n\t\t\treturn 0\n\t\t})\n\n\t\tconst dep = this.Service('dependency')\n\t\tconst dependencies = dep.get()\n\n\t\tconst currentSkill = await this.Store('skill').loadCurrentSkill()\n\n\t\tif (currentSkill.isRegistered) {\n\t\t\tskills = skills.filter((s) => s.id !== currentSkill.id)\n\t\t}\n\n\t\tconst selected = await this.ui.prompt({\n\t\t\tlabel: 'Which skills do you depend on?',\n\t\t\ttype: 'select',\n\t\t\tisArray: true,\n\t\t\tisRequired: true,\n\t\t\tvalue: dependencies.map((d: any) => d.id),\n\t\t\toptions: {\n\t\t\t\tchoices: skills.map((skill) => ({\n\t\t\t\t\tvalue: skill.id,\n\t\t\t\t\tlabel: skill.name + ' (' + skill.slug + ')',\n\t\t\t\t})),\n\t\t\t},\n\t\t})\n\n\t\tconst summary: string[] = []\n\n\t\tconst updatedDependencies = selected.map((id) => {\n\t\t\tconst skill = skills.find((s) => s.id === id)\n\n\t\t\tsummary.push(skill?.name + ' (' + skill?.id + ')')\n\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\tnamespace: skill?.slug ?? '**missing**',\n\t\t\t}\n\t\t})\n\n\t\tdep.set(updatedDependencies)\n\n\t\treturn {\n\t\t\tsummaryLines: [\n\t\t\t\t`${updatedDependencies.length} dependenc${\n\t\t\t\t\tupdatedDependencies.length === 1 ? 'y' : 'ies'\n\t\t\t\t} added.`,\n\t\t\t\t...summary,\n\t\t\t],\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;AAGA,IAAMA,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"ManageAction.js","names":["optionsSchema","buildSchema","id","description","fields","DeployAction","Store","fetchMySkills","skills","sort","a","b","name1","name","toLowerCase","name2","dep","Service","dependencies","get","loadCurrentSkill","currentSkill","isRegistered","filter","s","ui","prompt","label","type","isArray","isRequired","value","map","d","options","choices","skill","slug","selected","summary","updatedDependencies","find","push","namespace","set","summaryLines","length","AbstractAction"],"sources":["../../../../src/features/dependencies/actions/ManageAction.ts"],"sourcesContent":["import { buildSchema } from '@sprucelabs/schema'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'manageDependencies',\n\tdescription: 'Manage the skills you depend on.',\n\tfields: {},\n})\n\ntype OptionsSchema = typeof optionsSchema\n\nexport default class DeployAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = [\n\t\t'manage.dependencies',\n\t\t'remove.dependency',\n\t\t'dependencies',\n\t]\n\tpublic invocationMessage = 'Managing dependencies... 🔗'\n\n\tpublic async execute(): Promise<FeatureActionResponse> {\n\t\tlet skills = await this.Store('skill').fetchMySkills()\n\t\tskills.sort((a, b) => {\n\t\t\tconst name1 = a.name.toLowerCase()\n\t\t\tconst name2 = b.name.toLowerCase()\n\n\t\t\tif (name1 < name2) {\n\t\t\t\treturn -1\n\t\t\t} else if (name1 > name2) {\n\t\t\t\treturn 1\n\t\t\t}\n\n\t\t\treturn 0\n\t\t})\n\n\t\tconst dep = this.Service('dependency')\n\t\tconst dependencies = dep.get()\n\n\t\tconst currentSkill = await this.Store('skill').loadCurrentSkill()\n\n\t\tif (currentSkill.isRegistered) {\n\t\t\tskills = skills.filter((s) => s.id !== currentSkill.id)\n\t\t}\n\n\t\tconst selected = await this.ui.prompt({\n\t\t\tlabel: 'Which skills do you depend on?',\n\t\t\ttype: 'select',\n\t\t\tisArray: true,\n\t\t\tisRequired: true,\n\t\t\tvalue: dependencies.map((d: any) => d.id),\n\t\t\toptions: {\n\t\t\t\tchoices: skills.map((skill) => ({\n\t\t\t\t\tvalue: skill.id,\n\t\t\t\t\tlabel: skill.name + ' (' + skill.slug + ')',\n\t\t\t\t})),\n\t\t\t},\n\t\t})\n\n\t\tconst summary: string[] = []\n\n\t\tconst updatedDependencies = selected.map((id) => {\n\t\t\tconst skill = skills.find((s) => s.id === id)\n\n\t\t\tsummary.push(skill?.name + ' (' + skill?.id + ')')\n\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\tnamespace: skill?.slug ?? '**missing**',\n\t\t\t}\n\t\t})\n\n\t\tdep.set(updatedDependencies)\n\n\t\treturn {\n\t\t\tsummaryLines: [\n\t\t\t\t`${updatedDependencies.length} dependenc${\n\t\t\t\t\tupdatedDependencies.length === 1 ? 'y' : 'ies'\n\t\t\t\t} added.`,\n\t\t\t\t...summary,\n\t\t\t],\n\t\t}\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeployFeature.js","names":["DeployFeature","code","isRequired","name","isDev","diskUtil","resolvePath","__dirname","Writer","writePlugin","cwd","files","AbstractFeature"],"sources":["../../../src/features/deploy/DeployFeature.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport AbstractFeature, {\n\tFeatureDependency,\n\tInstallResults,\n} from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tdeploy: DeployFeature\n\t}\n}\n\nexport default class DeployFeature extends AbstractFeature {\n\tpublic description = 'Deploy your skill with ease.'\n\tpublic code: FeatureCode = 'deploy'\n\tpublic nameReadable = 'Deploy'\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{\n\t\t\tcode: 'node',\n\t\t\tisRequired: true,\n\t\t},\n\t]\n\tpublic packageDependencies = [\n\t\t{ name: '@sprucelabs/spruce-deploy-plugin@latest', isDev: false },\n\t]\n\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic async afterPackageInstall(): Promise<InstallResults> {\n\t\tconst files = await this.Writer('deploy').writePlugin(this.cwd)\n\n\t\treturn {\n\t\t\tfiles,\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;IAYqBA,a;;;;;;;;;;;;;;;oGACC,8B;6FACM,Q;qGACL,Q;qGACqB,CAC1C;MACCC,IAAI,EAAE,MADP;MAECC,UAAU,EAAE;IAFb,CAD0C,C;4GAMd,CAC5B;MAAEC,IAAI,EAAE,yCAAR;MAAmDC,KAAK,EAAE;IAA1D,CAD4B,C;mGAITC,
|
|
1
|
+
{"version":3,"file":"DeployFeature.js","names":["DeployFeature","code","isRequired","name","isDev","diskUtil","resolvePath","__dirname","Writer","writePlugin","cwd","files","AbstractFeature"],"sources":["../../../src/features/deploy/DeployFeature.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport AbstractFeature, {\n\tFeatureDependency,\n\tInstallResults,\n} from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tdeploy: DeployFeature\n\t}\n}\n\nexport default class DeployFeature extends AbstractFeature {\n\tpublic description = 'Deploy your skill with ease.'\n\tpublic code: FeatureCode = 'deploy'\n\tpublic nameReadable = 'Deploy'\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{\n\t\t\tcode: 'node',\n\t\t\tisRequired: true,\n\t\t},\n\t]\n\tpublic packageDependencies = [\n\t\t{ name: '@sprucelabs/spruce-deploy-plugin@latest', isDev: false },\n\t]\n\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic async afterPackageInstall(): Promise<InstallResults> {\n\t\tconst files = await this.Writer('deploy').writePlugin(this.cwd)\n\n\t\treturn {\n\t\t\tfiles,\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;IAYqBA,a;;;;;;;;;;;;;;;oGACC,8B;6FACM,Q;qGACL,Q;qGACqB,CAC1C;MACCC,IAAI,EAAE,MADP;MAECC,UAAU,EAAE;IAFb,CAD0C,C;4GAMd,CAC5B;MAAEC,IAAI,EAAE,yCAAR;MAAmDC,KAAK,EAAE;IAA1D,CAD4B,C;mGAITC,0BAAA,CAASC,WAAT,CAAqBC,SAArB,EAAgC,SAAhC,C;;;;;;;+GAEpB;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACqB,KAAKC,MAAL,CAAY,QAAZ,EAAsBC,WAAtB,CAAkC,KAAKC,GAAvC,CADrB;;cAAA;gBACOC,KADP;gBAAA,iCAGQ;kBACNA,KAAK,EAALA;gBADM,CAHR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;EAhB0CC,4B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HerokuAction.js","names":["optionsSchema","id","description","fields","teamName","type","label","isRequired","shouldRunSilently","isPrivate","shouldBuildAndLint","defaultValue","shouldRunTests","DeployAction","options","results","assertRegisteredSkill","assertDependencies","assertLoggedInToHeroku","setupGitRepo","setupGitRemote","setupProcFile","procResults","actionUtil","mergeActionResults","assertNoPendingGitChanges","errors","validateAndNormalizeOptions","buildAndLint","runTests","deploy","ui","clear","skill","Service","getCurrentSkill","summaryLines","name","slug","apiKey","SpruceError","code","stage","friendlyMessage","execute","failed","stdout","toLowerCase","search","command","confirm","pass","pkg","skillName","get","prompt","namesUtil","toKebab","args","env","HOME","process","procFile","diskUtil","resolvePath","cwd","files","doesFileExist","writeFile","push","action","path","inRepo","missing","hint","length","dependencies","featureInstaller","isInstalled","isTestInstalled","startLoading","Action","watchMode","shouldReportWhileRunning","testResults","isSkillInstalled","build","shouldFixLintFirst","buildResults","AbstractAction"],"sources":["../../../../src/features/deploy/actions/HerokuAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { diskUtil, namesUtil, SkillAuth } from '@sprucelabs/spruce-skill-utils'\nimport SpruceError from '../../../errors/SpruceError'\nimport actionUtil from '../../../utilities/action.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'deployHeroku',\n\tdescription: 'Deploy your skill to Heroku.',\n\tfields: {\n\t\tteamName: {\n\t\t\ttype: 'text',\n\t\t\tlabel: 'team name',\n\t\t\tisRequired: false,\n\t\t},\n\t\tshouldRunSilently: {\n\t\t\ttype: 'boolean',\n\t\t\tisPrivate: true,\n\t\t},\n\t\tshouldBuildAndLint: {\n\t\t\ttype: 'boolean',\n\t\t\tdefaultValue: true,\n\t\t},\n\t\tshouldRunTests: {\n\t\t\ttype: 'boolean',\n\t\t\tdefaultValue: true,\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class DeployAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = ['deploy.heroku']\n\tpublic invocationMessage = 'Deploying to Heroku... 🚀'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tlet results: FeatureActionResponse = {}\n\n\t\ttry {\n\t\t\tawait this.assertRegisteredSkill()\n\t\t\tawait this.assertDependencies()\n\t\t\tawait this.assertLoggedInToHeroku()\n\t\t\tawait this.setupGitRepo()\n\t\t\tawait this.setupGitRemote()\n\n\t\t\tconst procResults = await this.setupProcFile()\n\t\t\tresults = actionUtil.mergeActionResults(results, procResults)\n\n\t\t\tawait this.assertNoPendingGitChanges()\n\t\t} catch (err) {\n\t\t\treturn {\n\t\t\t\terrors: [err],\n\t\t\t}\n\t\t}\n\n\t\tconst { shouldBuildAndLint, shouldRunTests } =\n\t\t\tthis.validateAndNormalizeOptions(options)\n\n\t\tif (shouldBuildAndLint) {\n\t\t\tresults = await this.buildAndLint()\n\n\t\t\tif (results.errors) {\n\t\t\t\treturn results\n\t\t\t}\n\t\t}\n\n\t\tif (shouldRunTests) {\n\t\t\tresults = await this.runTests()\n\n\t\t\tif (results.errors) {\n\t\t\t\treturn results\n\t\t\t}\n\t\t}\n\n\t\tawait this.deploy()\n\n\t\tthis.ui.clear()\n\n\t\tconst skill = this.Service('auth').getCurrentSkill() as SkillAuth\n\n\t\tresults.summaryLines = [\n\t\t\t`You are good to go!`,\n\t\t\t\"You gotta make sure that your ENV's are set on Heroku to the following:\\n\",\n\t\t\t`SKILL_NAME=${skill.name}`,\n\t\t\t`SKILL_SLUG=${skill.slug}`,\n\t\t\t`SKILL_ID=${skill.id}`,\n\t\t\t`SKILL_API_KEY=${skill.apiKey}`,\n\t\t]\n\n\t\treturn results\n\t}\n\n\tprivate assertRegisteredSkill() {\n\t\tconst skill = this.Service('auth').getCurrentSkill()\n\t\tif (!skill) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'skill',\n\t\t\t\tfriendlyMessage:\n\t\t\t\t\t'You have to register your skill. Try `spruce login && spruce register` to get going!',\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async deploy() {\n\t\tawait this.Service('command').execute(\n\t\t\t'git push --set-upstream heroku master'\n\t\t)\n\t}\n\n\tprivate async assertNoPendingGitChanges() {\n\t\tconst results = await this.Service('command').execute('git status')\n\n\t\tconst failed =\n\t\t\t(results.stdout ?? '').toLowerCase().search('not staged') > -1 ||\n\t\t\t(results.stdout ?? '').toLowerCase().search('no commits') > -1\n\n\t\tif (failed) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'git',\n\t\t\t\tfriendlyMessage: 'You have pending changes. Commit them and try again!',\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async setupGitRemote() {\n\t\tconst command = this.Service('command')\n\n\t\ttry {\n\t\t\tawait command.execute('git ls-remote heroku')\n\n\t\t\treturn\n\t\t\t// eslint-disable-next-line no-empty\n\t\t} catch {}\n\n\t\tconst confirm = await this.ui.confirm(\n\t\t\t`I didn't find a a remote named \"heroku\", want me to create one?`\n\t\t)\n\n\t\tif (!confirm) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'remote',\n\t\t\t\tfriendlyMessage:\n\t\t\t\t\t'You need to setup a remote named \"heroku\" that Heroku will pull from.',\n\t\t\t})\n\t\t}\n\n\t\tlet pass = false\n\t\tlet label =\n\t\t\t'What name do you wanna give your app on heroku (using-kebab-case)?'\n\n\t\tconst pkg = this.Service('pkg')\n\t\tconst skillName = pkg.get('name')\n\n\t\tdo {\n\t\t\tlet name = await this.ui.prompt({\n\t\t\t\ttype: 'text',\n\t\t\t\tlabel,\n\t\t\t\tdefaultValue: skillName,\n\t\t\t\tisRequired: true,\n\t\t\t})\n\n\t\t\tname = namesUtil.toKebab(name)\n\n\t\t\ttry {\n\t\t\t\tawait command.execute('heroku create', {\n\t\t\t\t\targs: [name],\n\t\t\t\t\tenv: { HOME: process.env.HOME },\n\t\t\t\t})\n\n\t\t\t\tpass = true\n\t\t\t} catch {\n\t\t\t\tlabel = `Uh oh, \"${name}\" is taken, try again!`\n\t\t\t}\n\t\t} while (!pass)\n\n\t\ttry {\n\t\t\tawait command.execute('heroku buildpacks:set heroku/nodejs', {\n\t\t\t\tenv: { HOME: process.env.HOME },\n\t\t\t})\n\t\t} catch {\n\t\t\tthrow new SpruceError({ code: 'DEPLOY_FAILED', stage: 'remote' })\n\t\t}\n\t}\n\n\tprivate async setupProcFile(): Promise<FeatureActionResponse> {\n\t\tconst procFile = diskUtil.resolvePath(this.cwd, 'Procfile')\n\t\tconst results: FeatureActionResponse = {\n\t\t\tfiles: [],\n\t\t}\n\t\tif (!diskUtil.doesFileExist(procFile)) {\n\t\t\tconst confirm = await this.ui.confirm(\n\t\t\t\t`I don't see a Procfile, which Heroku needs to know how to run your skill. Want me to create one?`\n\t\t\t)\n\t\t\tif (!confirm) {\n\t\t\t\tthrow new SpruceError({\n\t\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\t\tstage: 'procfile',\n\t\t\t\t\tfriendlyMessage:\n\t\t\t\t\t\t'You are gonna need to create a Procfile in your project root so heroku knows how to run your skill.',\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tdiskUtil.writeFile(procFile, 'worker: npm run boot')\n\t\t\tresults.files?.push({\n\t\t\t\tname: 'Procfile',\n\t\t\t\taction: 'generated',\n\t\t\t\tpath: procFile,\n\t\t\t\tdescription: 'Used by Heroku to know how to run your skill.',\n\t\t\t})\n\t\t}\n\n\t\treturn results\n\t}\n\n\tprivate async setupGitRepo() {\n\t\tconst command = this.Service('command')\n\n\t\tlet inRepo = true\n\t\ttry {\n\t\t\tawait command.execute('git status')\n\t\t} catch {\n\t\t\tinRepo = false\n\t\t}\n\n\t\tif (!inRepo) {\n\t\t\tconst confirm = await this.ui.confirm(\n\t\t\t\t'You are not in a git repo. Would you like to initialize one now?'\n\t\t\t)\n\n\t\t\ttry {\n\t\t\t\tif (confirm) {\n\t\t\t\t\tawait command.execute('git init')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t// eslint-disable-next-line no-empty\n\t\t\t} catch {}\n\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'git',\n\t\t\t\tfriendlyMessage: 'You must be in a git repo to deploy!',\n\t\t\t})\n\t\t}\n\t}\n\n\tpublic async assertLoggedInToHeroku() {\n\t\ttry {\n\t\t\tawait this.Service('command').execute('grep api.heroku.com ~/.netrc')\n\t\t} catch {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'heroku',\n\t\t\t\tfriendlyMessage: `You gotta be logged in using \\`heroku login\\` before you can deploy.!`,\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async assertDependencies() {\n\t\tconst command = this.Service('command')\n\t\tconst missing: { name: string; hint: string }[] = []\n\n\t\ttry {\n\t\t\tawait command.execute('which heroku')\n\t\t} catch {\n\t\t\tmissing.push({\n\t\t\t\tname: 'heroku',\n\t\t\t\thint: 'Follow install instructions @ https://devcenter.heroku.com/articles/heroku-cli#download-and-install',\n\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\tawait command.execute('which git')\n\t\t} catch {\n\t\t\tmissing.push({\n\t\t\t\tname: 'git',\n\t\t\t\thint: 'Follow install instructions @ https://git-scm.com/downloads',\n\t\t\t})\n\t\t}\n\n\t\tif (missing.length > 0) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'MISSING_DEPENDENCIES',\n\t\t\t\tdependencies: missing,\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async runTests() {\n\t\tlet results: FeatureActionResponse = {}\n\n\t\tconst isTestInstalled = await this.featureInstaller.isInstalled('test')\n\n\t\tif (isTestInstalled) {\n\t\t\ttry {\n\t\t\t\tthis.ui.startLoading('Testing your skill. Hold onto your pants. 👖')\n\n\t\t\t\tconst testResults = await this.Action('test', 'test').execute({\n\t\t\t\t\twatchMode: 'off',\n\t\t\t\t\tshouldReportWhileRunning: false,\n\t\t\t\t})\n\n\t\t\t\tresults = actionUtil.mergeActionResults(results, testResults)\n\t\t\t} catch (err) {\n\t\t\t\tresults = {\n\t\t\t\t\terrors: [\n\t\t\t\t\t\tnew SpruceError({ code: 'DEPLOY_FAILED', stage: 'testing' }),\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn results\n\t}\n\n\tprivate async buildAndLint() {\n\t\tlet results: FeatureActionResponse = {}\n\n\t\tconst isSkillInstalled = await this.featureInstaller.isInstalled('skill')\n\n\t\tif (isSkillInstalled) {\n\t\t\ttry {\n\t\t\t\tthis.ui.startLoading('Building your skill. This may take a minute...')\n\n\t\t\t\tconst buildResults = await this.Service('build').build({\n\t\t\t\t\tshouldFixLintFirst: true,\n\t\t\t\t})\n\n\t\t\t\tresults = actionUtil.mergeActionResults(results, buildResults)\n\t\t\t} catch (err) {\n\t\t\t\tresults = {\n\t\t\t\t\terrors: [\n\t\t\t\t\t\tnew SpruceError({ code: 'DEPLOY_FAILED', stage: 'building' }),\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn results\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HerokuAction.js","names":["optionsSchema","buildSchema","id","description","fields","teamName","type","label","isRequired","shouldRunSilently","isPrivate","shouldBuildAndLint","defaultValue","shouldRunTests","DeployAction","options","results","assertRegisteredSkill","assertDependencies","assertLoggedInToHeroku","setupGitRepo","setupGitRemote","setupProcFile","procResults","actionUtil","mergeActionResults","assertNoPendingGitChanges","errors","validateAndNormalizeOptions","buildAndLint","runTests","deploy","ui","clear","skill","Service","getCurrentSkill","summaryLines","name","slug","apiKey","SpruceError","code","stage","friendlyMessage","execute","failed","stdout","toLowerCase","search","command","confirm","pass","pkg","skillName","get","prompt","namesUtil","toKebab","args","env","HOME","process","procFile","diskUtil","resolvePath","cwd","files","doesFileExist","writeFile","push","action","path","inRepo","missing","hint","length","dependencies","featureInstaller","isInstalled","isTestInstalled","startLoading","Action","watchMode","shouldReportWhileRunning","testResults","isSkillInstalled","build","shouldFixLintFirst","buildResults","AbstractAction"],"sources":["../../../../src/features/deploy/actions/HerokuAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { diskUtil, namesUtil, SkillAuth } from '@sprucelabs/spruce-skill-utils'\nimport SpruceError from '../../../errors/SpruceError'\nimport actionUtil from '../../../utilities/action.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'deployHeroku',\n\tdescription: 'Deploy your skill to Heroku.',\n\tfields: {\n\t\tteamName: {\n\t\t\ttype: 'text',\n\t\t\tlabel: 'team name',\n\t\t\tisRequired: false,\n\t\t},\n\t\tshouldRunSilently: {\n\t\t\ttype: 'boolean',\n\t\t\tisPrivate: true,\n\t\t},\n\t\tshouldBuildAndLint: {\n\t\t\ttype: 'boolean',\n\t\t\tdefaultValue: true,\n\t\t},\n\t\tshouldRunTests: {\n\t\t\ttype: 'boolean',\n\t\t\tdefaultValue: true,\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class DeployAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = ['deploy.heroku']\n\tpublic invocationMessage = 'Deploying to Heroku... 🚀'\n\n\tpublic async execute(options: Options): Promise<FeatureActionResponse> {\n\t\tlet results: FeatureActionResponse = {}\n\n\t\ttry {\n\t\t\tawait this.assertRegisteredSkill()\n\t\t\tawait this.assertDependencies()\n\t\t\tawait this.assertLoggedInToHeroku()\n\t\t\tawait this.setupGitRepo()\n\t\t\tawait this.setupGitRemote()\n\n\t\t\tconst procResults = await this.setupProcFile()\n\t\t\tresults = actionUtil.mergeActionResults(results, procResults)\n\n\t\t\tawait this.assertNoPendingGitChanges()\n\t\t} catch (err) {\n\t\t\treturn {\n\t\t\t\terrors: [err],\n\t\t\t}\n\t\t}\n\n\t\tconst { shouldBuildAndLint, shouldRunTests } =\n\t\t\tthis.validateAndNormalizeOptions(options)\n\n\t\tif (shouldBuildAndLint) {\n\t\t\tresults = await this.buildAndLint()\n\n\t\t\tif (results.errors) {\n\t\t\t\treturn results\n\t\t\t}\n\t\t}\n\n\t\tif (shouldRunTests) {\n\t\t\tresults = await this.runTests()\n\n\t\t\tif (results.errors) {\n\t\t\t\treturn results\n\t\t\t}\n\t\t}\n\n\t\tawait this.deploy()\n\n\t\tthis.ui.clear()\n\n\t\tconst skill = this.Service('auth').getCurrentSkill() as SkillAuth\n\n\t\tresults.summaryLines = [\n\t\t\t`You are good to go!`,\n\t\t\t\"You gotta make sure that your ENV's are set on Heroku to the following:\\n\",\n\t\t\t`SKILL_NAME=${skill.name}`,\n\t\t\t`SKILL_SLUG=${skill.slug}`,\n\t\t\t`SKILL_ID=${skill.id}`,\n\t\t\t`SKILL_API_KEY=${skill.apiKey}`,\n\t\t]\n\n\t\treturn results\n\t}\n\n\tprivate assertRegisteredSkill() {\n\t\tconst skill = this.Service('auth').getCurrentSkill()\n\t\tif (!skill) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'skill',\n\t\t\t\tfriendlyMessage:\n\t\t\t\t\t'You have to register your skill. Try `spruce login && spruce register` to get going!',\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async deploy() {\n\t\tawait this.Service('command').execute(\n\t\t\t'git push --set-upstream heroku master'\n\t\t)\n\t}\n\n\tprivate async assertNoPendingGitChanges() {\n\t\tconst results = await this.Service('command').execute('git status')\n\n\t\tconst failed =\n\t\t\t(results.stdout ?? '').toLowerCase().search('not staged') > -1 ||\n\t\t\t(results.stdout ?? '').toLowerCase().search('no commits') > -1\n\n\t\tif (failed) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'git',\n\t\t\t\tfriendlyMessage: 'You have pending changes. Commit them and try again!',\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async setupGitRemote() {\n\t\tconst command = this.Service('command')\n\n\t\ttry {\n\t\t\tawait command.execute('git ls-remote heroku')\n\n\t\t\treturn\n\t\t\t// eslint-disable-next-line no-empty\n\t\t} catch {}\n\n\t\tconst confirm = await this.ui.confirm(\n\t\t\t`I didn't find a a remote named \"heroku\", want me to create one?`\n\t\t)\n\n\t\tif (!confirm) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'remote',\n\t\t\t\tfriendlyMessage:\n\t\t\t\t\t'You need to setup a remote named \"heroku\" that Heroku will pull from.',\n\t\t\t})\n\t\t}\n\n\t\tlet pass = false\n\t\tlet label =\n\t\t\t'What name do you wanna give your app on heroku (using-kebab-case)?'\n\n\t\tconst pkg = this.Service('pkg')\n\t\tconst skillName = pkg.get('name')\n\n\t\tdo {\n\t\t\tlet name = await this.ui.prompt({\n\t\t\t\ttype: 'text',\n\t\t\t\tlabel,\n\t\t\t\tdefaultValue: skillName,\n\t\t\t\tisRequired: true,\n\t\t\t})\n\n\t\t\tname = namesUtil.toKebab(name)\n\n\t\t\ttry {\n\t\t\t\tawait command.execute('heroku create', {\n\t\t\t\t\targs: [name],\n\t\t\t\t\tenv: { HOME: process.env.HOME },\n\t\t\t\t})\n\n\t\t\t\tpass = true\n\t\t\t} catch {\n\t\t\t\tlabel = `Uh oh, \"${name}\" is taken, try again!`\n\t\t\t}\n\t\t} while (!pass)\n\n\t\ttry {\n\t\t\tawait command.execute('heroku buildpacks:set heroku/nodejs', {\n\t\t\t\tenv: { HOME: process.env.HOME },\n\t\t\t})\n\t\t} catch {\n\t\t\tthrow new SpruceError({ code: 'DEPLOY_FAILED', stage: 'remote' })\n\t\t}\n\t}\n\n\tprivate async setupProcFile(): Promise<FeatureActionResponse> {\n\t\tconst procFile = diskUtil.resolvePath(this.cwd, 'Procfile')\n\t\tconst results: FeatureActionResponse = {\n\t\t\tfiles: [],\n\t\t}\n\t\tif (!diskUtil.doesFileExist(procFile)) {\n\t\t\tconst confirm = await this.ui.confirm(\n\t\t\t\t`I don't see a Procfile, which Heroku needs to know how to run your skill. Want me to create one?`\n\t\t\t)\n\t\t\tif (!confirm) {\n\t\t\t\tthrow new SpruceError({\n\t\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\t\tstage: 'procfile',\n\t\t\t\t\tfriendlyMessage:\n\t\t\t\t\t\t'You are gonna need to create a Procfile in your project root so heroku knows how to run your skill.',\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tdiskUtil.writeFile(procFile, 'worker: npm run boot')\n\t\t\tresults.files?.push({\n\t\t\t\tname: 'Procfile',\n\t\t\t\taction: 'generated',\n\t\t\t\tpath: procFile,\n\t\t\t\tdescription: 'Used by Heroku to know how to run your skill.',\n\t\t\t})\n\t\t}\n\n\t\treturn results\n\t}\n\n\tprivate async setupGitRepo() {\n\t\tconst command = this.Service('command')\n\n\t\tlet inRepo = true\n\t\ttry {\n\t\t\tawait command.execute('git status')\n\t\t} catch {\n\t\t\tinRepo = false\n\t\t}\n\n\t\tif (!inRepo) {\n\t\t\tconst confirm = await this.ui.confirm(\n\t\t\t\t'You are not in a git repo. Would you like to initialize one now?'\n\t\t\t)\n\n\t\t\ttry {\n\t\t\t\tif (confirm) {\n\t\t\t\t\tawait command.execute('git init')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t// eslint-disable-next-line no-empty\n\t\t\t} catch {}\n\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'git',\n\t\t\t\tfriendlyMessage: 'You must be in a git repo to deploy!',\n\t\t\t})\n\t\t}\n\t}\n\n\tpublic async assertLoggedInToHeroku() {\n\t\ttry {\n\t\t\tawait this.Service('command').execute('grep api.heroku.com ~/.netrc')\n\t\t} catch {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'DEPLOY_FAILED',\n\t\t\t\tstage: 'heroku',\n\t\t\t\tfriendlyMessage: `You gotta be logged in using \\`heroku login\\` before you can deploy.!`,\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async assertDependencies() {\n\t\tconst command = this.Service('command')\n\t\tconst missing: { name: string; hint: string }[] = []\n\n\t\ttry {\n\t\t\tawait command.execute('which heroku')\n\t\t} catch {\n\t\t\tmissing.push({\n\t\t\t\tname: 'heroku',\n\t\t\t\thint: 'Follow install instructions @ https://devcenter.heroku.com/articles/heroku-cli#download-and-install',\n\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\tawait command.execute('which git')\n\t\t} catch {\n\t\t\tmissing.push({\n\t\t\t\tname: 'git',\n\t\t\t\thint: 'Follow install instructions @ https://git-scm.com/downloads',\n\t\t\t})\n\t\t}\n\n\t\tif (missing.length > 0) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'MISSING_DEPENDENCIES',\n\t\t\t\tdependencies: missing,\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate async runTests() {\n\t\tlet results: FeatureActionResponse = {}\n\n\t\tconst isTestInstalled = await this.featureInstaller.isInstalled('test')\n\n\t\tif (isTestInstalled) {\n\t\t\ttry {\n\t\t\t\tthis.ui.startLoading('Testing your skill. Hold onto your pants. 👖')\n\n\t\t\t\tconst testResults = await this.Action('test', 'test').execute({\n\t\t\t\t\twatchMode: 'off',\n\t\t\t\t\tshouldReportWhileRunning: false,\n\t\t\t\t})\n\n\t\t\t\tresults = actionUtil.mergeActionResults(results, testResults)\n\t\t\t} catch (err) {\n\t\t\t\tresults = {\n\t\t\t\t\terrors: [\n\t\t\t\t\t\tnew SpruceError({ code: 'DEPLOY_FAILED', stage: 'testing' }),\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn results\n\t}\n\n\tprivate async buildAndLint() {\n\t\tlet results: FeatureActionResponse = {}\n\n\t\tconst isSkillInstalled = await this.featureInstaller.isInstalled('skill')\n\n\t\tif (isSkillInstalled) {\n\t\t\ttry {\n\t\t\t\tthis.ui.startLoading('Building your skill. This may take a minute...')\n\n\t\t\t\tconst buildResults = await this.Service('build').build({\n\t\t\t\t\tshouldFixLintFirst: true,\n\t\t\t\t})\n\n\t\t\t\tresults = actionUtil.mergeActionResults(results, buildResults)\n\t\t\t} catch (err) {\n\t\t\t\tresults = {\n\t\t\t\t\terrors: [\n\t\t\t\t\t\tnew SpruceError({ code: 'DEPLOY_FAILED', stage: 'building' }),\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn results\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeployWriter.js","names":["DeployWriter","cwd","destination","diskUtil","resolveHashSprucePath","pluginContents","templates","deployPlugin","results","writeFileIfChangedMixinResults","AbstractWriter"],"sources":["../../../../src/features/deploy/writers/DeployWriter.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport AbstractWriter from '../../../writers/AbstractWriter'\n\nexport default class DeployWriter extends AbstractWriter {\n\tpublic writePlugin(cwd: string) {\n\t\tconst destination = diskUtil.resolveHashSprucePath(\n\t\t\tcwd,\n\t\t\t'features',\n\t\t\t'deploy.plugin.ts'\n\t\t)\n\n\t\tconst pluginContents = this.templates.deployPlugin()\n\n\t\tconst results = this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tpluginContents,\n\t\t\t'Supports your skill with deploys!'\n\t\t)\n\n\t\treturn results\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;IAEqBA,Y;;;;;;;;;;;;WACpB,qBAAmBC,GAAnB,EAAgC;MAC/B,IAAMC,WAAW,GAAGC,
|
|
1
|
+
{"version":3,"file":"DeployWriter.js","names":["DeployWriter","cwd","destination","diskUtil","resolveHashSprucePath","pluginContents","templates","deployPlugin","results","writeFileIfChangedMixinResults","AbstractWriter"],"sources":["../../../../src/features/deploy/writers/DeployWriter.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport AbstractWriter from '../../../writers/AbstractWriter'\n\nexport default class DeployWriter extends AbstractWriter {\n\tpublic writePlugin(cwd: string) {\n\t\tconst destination = diskUtil.resolveHashSprucePath(\n\t\t\tcwd,\n\t\t\t'features',\n\t\t\t'deploy.plugin.ts'\n\t\t)\n\n\t\tconst pluginContents = this.templates.deployPlugin()\n\n\t\tconst results = this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tpluginContents,\n\t\t\t'Supports your skill with deploys!'\n\t\t)\n\n\t\treturn results\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;IAEqBA,Y;;;;;;;;;;;;WACpB,qBAAmBC,GAAnB,EAAgC;MAC/B,IAAMC,WAAW,GAAGC,0BAAA,CAASC,qBAAT,CACnBH,GADmB,EAEnB,UAFmB,EAGnB,kBAHmB,CAApB;;MAMA,IAAMI,cAAc,GAAG,KAAKC,SAAL,CAAeC,YAAf,EAAvB;MAEA,IAAMC,OAAO,GAAG,KAAKC,8BAAL,CACfP,WADe,EAEfG,cAFe,EAGf,mCAHe,CAAhB;MAMA,OAAOG,OAAP;IACA;;;EAjBwCE,2B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ErrorFeature.js","names":["ErrorFeature","options","code","isRequired","name","diskUtil","resolvePath","__dirname","emitter","on","handleDidExecuteCommand","bind","featureInstaller","isInstalled","filesToSkip","isSkillInstalled","writePlugin","files","payload","featureCode","actionCode","Action","execute","results","plugin","push","Writer","cwd","AbstractFeature"],"sources":["../../../src/features/error/ErrorFeature.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { NpmPackage } from '../../types/cli.types'\nimport AbstractFeature, {\n\tFeatureDependency,\n\tFeatureOptions,\n\tInstallResults,\n} from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\terror: ErrorFeature\n\t}\n\n\tinterface FeatureOptionsMap {\n\t\terror: undefined\n\t}\n}\n\nexport default class ErrorFeature extends AbstractFeature {\n\tpublic nameReadable = 'error handling'\n\tpublic description =\n\t\t'Errors: Use schemas to define your errors and get great type checking!'\n\tpublic code: FeatureCode = 'error'\n\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{ code: 'schema', isRequired: true },\n\t\t{ code: 'node', isRequired: true },\n\t]\n\tpublic packageDependencies: NpmPackage[] = [\n\t\t{\n\t\t\tname: '@sprucelabs/error@latest',\n\t\t},\n\t]\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic constructor(options: FeatureOptions) {\n\t\tsuper(options)\n\n\t\tvoid this.emitter.on(\n\t\t\t'feature.did-execute',\n\t\t\tthis.handleDidExecuteCommand.bind(this)\n\t\t)\n\n\t\tvoid this.emitter.on('skill.will-write-directory-template', async () => {\n\t\t\tconst isInstalled = await this.featureInstaller.isInstalled('error')\n\t\t\tif (isInstalled) {\n\t\t\t\treturn {\n\t\t\t\t\tfilesToSkip: ['options.types.ts'],\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {}\n\t\t})\n\t}\n\n\tpublic async afterPackageInstall(): Promise<InstallResults> {\n\t\tconst isSkillInstalled = await this.featureInstaller.isInstalled('skill')\n\n\t\tif (!isSkillInstalled) {\n\t\t\treturn {}\n\t\t}\n\n\t\tconst files = await this.writePlugin()\n\n\t\treturn {\n\t\t\tfiles,\n\t\t}\n\t}\n\n\tprivate async handleDidExecuteCommand(payload: {\n\t\tfeatureCode: string\n\t\tactionCode: string\n\t}) {\n\t\tconst { featureCode, actionCode } = payload\n\n\t\tconst isInstalled = await this.featureInstaller.isInstalled('error')\n\n\t\tconst isSkillInstalled = await this.featureInstaller.isInstalled('skill')\n\n\t\tif (isInstalled && featureCode === 'node' && actionCode === 'upgrade') {\n\t\t\tconst results = await this.Action('error', 'sync').execute({})\n\n\t\t\tif (isSkillInstalled) {\n\t\t\t\tif (!results.files) {\n\t\t\t\t\tresults.files = []\n\t\t\t\t}\n\n\t\t\t\tconst plugin = await this.writePlugin()\n\t\t\t\tresults.files.push(...plugin)\n\t\t\t}\n\n\t\t\treturn results\n\t\t}\n\n\t\treturn {}\n\t}\n\tprivate async writePlugin() {\n\t\treturn this.Writer('error').writePlugin(this.cwd)\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;IAiBqBA,Y;;;;;EAiBpB,sBAAmBC,OAAnB,EAA4C;IAAA;;IAAA;IAC3C,0BAAMA,OAAN;IAD2C,iGAhBtB,gBAgBsB;IAAA,gGAd3C,wEAc2C;IAAA,yFAbjB,OAaiB;IAAA,iGAXD,CAC1C;MAAEC,IAAI,EAAE,QAAR;MAAkBC,UAAU,EAAE;IAA9B,CAD0C,EAE1C;MAAED,IAAI,EAAE,MAAR;MAAgBC,UAAU,EAAE;IAA5B,CAF0C,CAWC;IAAA,wGAPD,CAC1C;MACCC,IAAI,EAAE;IADP,CAD0C,CAOC;IAAA,+FAFxBC,
|
|
1
|
+
{"version":3,"file":"ErrorFeature.js","names":["ErrorFeature","options","code","isRequired","name","diskUtil","resolvePath","__dirname","emitter","on","handleDidExecuteCommand","bind","featureInstaller","isInstalled","filesToSkip","isSkillInstalled","writePlugin","files","payload","featureCode","actionCode","Action","execute","results","plugin","push","Writer","cwd","AbstractFeature"],"sources":["../../../src/features/error/ErrorFeature.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { NpmPackage } from '../../types/cli.types'\nimport AbstractFeature, {\n\tFeatureDependency,\n\tFeatureOptions,\n\tInstallResults,\n} from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\terror: ErrorFeature\n\t}\n\n\tinterface FeatureOptionsMap {\n\t\terror: undefined\n\t}\n}\n\nexport default class ErrorFeature extends AbstractFeature {\n\tpublic nameReadable = 'error handling'\n\tpublic description =\n\t\t'Errors: Use schemas to define your errors and get great type checking!'\n\tpublic code: FeatureCode = 'error'\n\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{ code: 'schema', isRequired: true },\n\t\t{ code: 'node', isRequired: true },\n\t]\n\tpublic packageDependencies: NpmPackage[] = [\n\t\t{\n\t\t\tname: '@sprucelabs/error@latest',\n\t\t},\n\t]\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic constructor(options: FeatureOptions) {\n\t\tsuper(options)\n\n\t\tvoid this.emitter.on(\n\t\t\t'feature.did-execute',\n\t\t\tthis.handleDidExecuteCommand.bind(this)\n\t\t)\n\n\t\tvoid this.emitter.on('skill.will-write-directory-template', async () => {\n\t\t\tconst isInstalled = await this.featureInstaller.isInstalled('error')\n\t\t\tif (isInstalled) {\n\t\t\t\treturn {\n\t\t\t\t\tfilesToSkip: ['options.types.ts'],\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn {}\n\t\t})\n\t}\n\n\tpublic async afterPackageInstall(): Promise<InstallResults> {\n\t\tconst isSkillInstalled = await this.featureInstaller.isInstalled('skill')\n\n\t\tif (!isSkillInstalled) {\n\t\t\treturn {}\n\t\t}\n\n\t\tconst files = await this.writePlugin()\n\n\t\treturn {\n\t\t\tfiles,\n\t\t}\n\t}\n\n\tprivate async handleDidExecuteCommand(payload: {\n\t\tfeatureCode: string\n\t\tactionCode: string\n\t}) {\n\t\tconst { featureCode, actionCode } = payload\n\n\t\tconst isInstalled = await this.featureInstaller.isInstalled('error')\n\n\t\tconst isSkillInstalled = await this.featureInstaller.isInstalled('skill')\n\n\t\tif (isInstalled && featureCode === 'node' && actionCode === 'upgrade') {\n\t\t\tconst results = await this.Action('error', 'sync').execute({})\n\n\t\t\tif (isSkillInstalled) {\n\t\t\t\tif (!results.files) {\n\t\t\t\t\tresults.files = []\n\t\t\t\t}\n\n\t\t\t\tconst plugin = await this.writePlugin()\n\t\t\t\tresults.files.push(...plugin)\n\t\t\t}\n\n\t\t\treturn results\n\t\t}\n\n\t\treturn {}\n\t}\n\tprivate async writePlugin() {\n\t\treturn this.Writer('error').writePlugin(this.cwd)\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParentTestFinder.js","names":["ParentTestFinder","cwd","diskUtil","resolvePath","matches","allDetails","introspectionUtil","introspect","map","path","idx","details","name","classes","className","isDefaultExport","filter","match"],"sources":["../../../src/features/error/ParentTestFinder.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport globby from 'globby'\nimport introspectionUtil from '../../utilities/introspection.utility'\n\nexport default class ParentTestFinder {\n\tprivate cwd: string\n\n\tpublic constructor(cwd: string) {\n\t\tthis.cwd = cwd\n\t}\n\n\tpublic async findAbstractTests() {\n\t\tconst matches = await globby([\n\t\t\tdiskUtil.resolvePath(this.cwd, '**', 'Abstract*Test*.ts'),\n\t\t\t'!**/*.d.ts',\n\t\t])\n\n\t\tconst allDetails = introspectionUtil.introspect(matches)\n\n\t\treturn matches\n\t\t\t.map((path, idx) => {\n\t\t\t\tconst details = allDetails[idx]\n\t\t\t\treturn {\n\t\t\t\t\tpath,\n\t\t\t\t\tname: details.classes?.[0]?.className,\n\t\t\t\t\tisDefaultExport: true,\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter((match) => !!match.name)\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;IAEqBA,gB;EAGpB,0BAAmBC,GAAnB,EAAgC;IAAA;IAAA;IAC/B,KAAKA,GAAL,GAAWA,GAAX;EACA;;;;;6GAED;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACuB,
|
|
1
|
+
{"version":3,"file":"ParentTestFinder.js","names":["ParentTestFinder","cwd","globby","diskUtil","resolvePath","matches","allDetails","introspectionUtil","introspect","map","path","idx","details","name","classes","className","isDefaultExport","filter","match"],"sources":["../../../src/features/error/ParentTestFinder.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport globby from 'globby'\nimport introspectionUtil from '../../utilities/introspection.utility'\n\nexport default class ParentTestFinder {\n\tprivate cwd: string\n\n\tpublic constructor(cwd: string) {\n\t\tthis.cwd = cwd\n\t}\n\n\tpublic async findAbstractTests() {\n\t\tconst matches = await globby([\n\t\t\tdiskUtil.resolvePath(this.cwd, '**', 'Abstract*Test*.ts'),\n\t\t\t'!**/*.d.ts',\n\t\t])\n\n\t\tconst allDetails = introspectionUtil.introspect(matches)\n\n\t\treturn matches\n\t\t\t.map((path, idx) => {\n\t\t\t\tconst details = allDetails[idx]\n\t\t\t\treturn {\n\t\t\t\t\tpath,\n\t\t\t\t\tname: details.classes?.[0]?.className,\n\t\t\t\t\tisDefaultExport: true,\n\t\t\t\t}\n\t\t\t})\n\t\t\t.filter((match) => !!match.name)\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;IAEqBA,gB;EAGpB,0BAAmBC,GAAnB,EAAgC;IAAA;IAAA;IAC/B,KAAKA,GAAL,GAAWA,GAAX;EACA;;;;;6GAED;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACuB,IAAAC,kBAAA,EAAO,CAC5BC,0BAAA,CAASC,WAAT,CAAqB,KAAKH,GAA1B,EAA+B,IAA/B,EAAqC,mBAArC,CAD4B,EAE5B,YAF4B,CAAP,CADvB;;cAAA;gBACOI,OADP;gBAMOC,UANP,GAMoBC,yBAAA,CAAkBC,UAAlB,CAA6BH,OAA7B,CANpB;gBAAA,iCAQQA,OAAO,CACZI,GADK,CACD,UAACC,IAAD,EAAOC,GAAP,EAAe;kBAAA;;kBACnB,IAAMC,OAAO,GAAGN,UAAU,CAACK,GAAD,CAA1B;kBACA,OAAO;oBACND,IAAI,EAAJA,IADM;oBAENG,IAAI,sBAAED,OAAO,CAACE,OAAV,0EAAE,iBAAkB,CAAlB,CAAF,sDAAE,kBAAsBC,SAFtB;oBAGNC,eAAe,EAAE;kBAHX,CAAP;gBAKA,CARK,EASLC,MATK,CASE,UAACC,KAAD;kBAAA,OAAW,CAAC,CAACA,KAAK,CAACL,IAAnB;gBAAA,CATF,CARR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C"}
|