@sprucelabs/spruce-cli 15.4.12 → 17.0.1
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 +31 -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.d.ts +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.d.ts +1 -0
- 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/apiClient.utility.d.ts +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.d.ts +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/widgets/widget.utilities.d.ts +1 -1
- package/build/writers/AbstractWriter.js.map +1 -1
- package/package.json +36 -36
- 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":"ViewFeature.js","names":["ViewFeature","options","diskUtil","resolvePath","__dirname","name","code","isRequired","emitter","on","payload","featureCode","actionCode","featureInstaller","isInstalled","Writer","writePlugin","cwd","files","abstractClasses","label","Service","add","id","namespace","AbstractFeature"],"sources":["../../../src/features/view/ViewFeature.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { NpmPackage } from '../../types/cli.types'\nimport AbstractFeature, { FeatureDependency } from '../AbstractFeature'\nimport { ActionOptions, FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tview: ViewFeature\n\t}\n\n\tinterface FeatureOptionsMap {\n\t\tview: undefined\n\t}\n}\n\nexport default class ViewFeature extends AbstractFeature {\n\tpublic nameReadable = 'views'\n\tpublic description = 'Views: Create views using the Heartwood framework.'\n\tpublic code: FeatureCode = 'view'\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic readonly packageDependencies: NpmPackage[] = [\n\t\t{\n\t\t\tname: '@sprucelabs/heartwood-view-controllers@latest',\n\t\t},\n\t\t{\n\t\t\tname: '@sprucelabs/spruce-view-plugin@latest',\n\t\t},\n\t]\n\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{\n\t\t\tcode: 'node',\n\t\t\tisRequired: true,\n\t\t},\n\t\t{\n\t\t\tcode: 'schema',\n\t\t\tisRequired: true,\n\t\t},\n\t\t{\n\t\t\tcode: 'event',\n\t\t\tisRequired: true,\n\t\t},\n\t]\n\n\tpublic constructor(options: ActionOptions) {\n\t\tsuper(options)\n\n\t\tvoid this.emitter.on('feature.did-execute', async (payload) => {\n\t\t\tconst { featureCode, actionCode } = payload\n\t\t\tconst isInstalled = await this.featureInstaller.isInstalled('view')\n\n\t\t\tif (isInstalled && featureCode === 'node' && actionCode === 'upgrade') {\n\t\t\t\tconst files = await this.Writer('view').writePlugin(this.cwd)\n\t\t\t\treturn {\n\t\t\t\t\tfiles,\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {}\n\t\t})\n\n\t\tvoid this.emitter.on('test.register-abstract-test-classes', async () => {\n\t\t\treturn {\n\t\t\t\tabstractClasses: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'AbstractViewControllerTest',\n\t\t\t\t\t\tlabel: 'AbstractViewControllerTest',\n\t\t\t\t\t\timport: '@sprucelabs/spruce-view-plugin',\n\t\t\t\t\t\tfeatureCode: 'view',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t})\n\t}\n\n\tpublic async afterPackageInstall() {\n\t\tconst files = await this.Writer('view').writePlugin(this.cwd)\n\n\t\tthis.Service('dependency').add({\n\t\t\tid: '**',\n\t\t\tnamespace: 'heartwood',\n\t\t})\n\n\t\treturn { files }\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;IAaqBA,W;;;;;EA8BpB,qBAAmBC,OAAnB,EAA2C;IAAA;;IAAA;IAC1C,0BAAMA,OAAN;IAD0C,iGA7BrB,OA6BqB;IAAA,gGA5BtB,oDA4BsB;IAAA,yFA3BhB,MA2BgB;IAAA,+FA1BvBC,
|
|
1
|
+
{"version":3,"file":"ViewFeature.js","names":["ViewFeature","options","diskUtil","resolvePath","__dirname","name","code","isRequired","emitter","on","payload","featureCode","actionCode","featureInstaller","isInstalled","Writer","writePlugin","cwd","files","abstractClasses","label","Service","add","id","namespace","AbstractFeature"],"sources":["../../../src/features/view/ViewFeature.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { NpmPackage } from '../../types/cli.types'\nimport AbstractFeature, { FeatureDependency } from '../AbstractFeature'\nimport { ActionOptions, FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tview: ViewFeature\n\t}\n\n\tinterface FeatureOptionsMap {\n\t\tview: undefined\n\t}\n}\n\nexport default class ViewFeature extends AbstractFeature {\n\tpublic nameReadable = 'views'\n\tpublic description = 'Views: Create views using the Heartwood framework.'\n\tpublic code: FeatureCode = 'view'\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic readonly packageDependencies: NpmPackage[] = [\n\t\t{\n\t\t\tname: '@sprucelabs/heartwood-view-controllers@latest',\n\t\t},\n\t\t{\n\t\t\tname: '@sprucelabs/spruce-view-plugin@latest',\n\t\t},\n\t]\n\n\tpublic dependencies: FeatureDependency[] = [\n\t\t{\n\t\t\tcode: 'node',\n\t\t\tisRequired: true,\n\t\t},\n\t\t{\n\t\t\tcode: 'schema',\n\t\t\tisRequired: true,\n\t\t},\n\t\t{\n\t\t\tcode: 'event',\n\t\t\tisRequired: true,\n\t\t},\n\t]\n\n\tpublic constructor(options: ActionOptions) {\n\t\tsuper(options)\n\n\t\tvoid this.emitter.on('feature.did-execute', async (payload) => {\n\t\t\tconst { featureCode, actionCode } = payload\n\t\t\tconst isInstalled = await this.featureInstaller.isInstalled('view')\n\n\t\t\tif (isInstalled && featureCode === 'node' && actionCode === 'upgrade') {\n\t\t\t\tconst files = await this.Writer('view').writePlugin(this.cwd)\n\t\t\t\treturn {\n\t\t\t\t\tfiles,\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {}\n\t\t})\n\n\t\tvoid this.emitter.on('test.register-abstract-test-classes', async () => {\n\t\t\treturn {\n\t\t\t\tabstractClasses: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: 'AbstractViewControllerTest',\n\t\t\t\t\t\tlabel: 'AbstractViewControllerTest',\n\t\t\t\t\t\timport: '@sprucelabs/spruce-view-plugin',\n\t\t\t\t\t\tfeatureCode: 'view',\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t}\n\t\t})\n\t}\n\n\tpublic async afterPackageInstall() {\n\t\tconst files = await this.Writer('view').writePlugin(this.cwd)\n\n\t\tthis.Service('dependency').add({\n\t\t\tid: '**',\n\t\t\tnamespace: 'heartwood',\n\t\t})\n\n\t\treturn { files }\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAEA;;;;;;IAaqBA,W;;;;;EA8BpB,qBAAmBC,OAAnB,EAA2C;IAAA;;IAAA;IAC1C,0BAAMA,OAAN;IAD0C,iGA7BrB,OA6BqB;IAAA,gGA5BtB,oDA4BsB;IAAA,yFA3BhB,MA2BgB;IAAA,+FA1BvBC,0BAAA,CAASC,WAAT,CAAqBC,SAArB,EAAgC,SAAhC,CA0BuB;IAAA,wGAxBS,CACnD;MACCC,IAAI,EAAE;IADP,CADmD,EAInD;MACCA,IAAI,EAAE;IADP,CAJmD,CAwBT;IAAA,iGAfA,CAC1C;MACCC,IAAI,EAAE,MADP;MAECC,UAAU,EAAE;IAFb,CAD0C,EAK1C;MACCD,IAAI,EAAE,QADP;MAECC,UAAU,EAAE;IAFb,CAL0C,EAS1C;MACCD,IAAI,EAAE,OADP;MAECC,UAAU,EAAE;IAFb,CAT0C,CAeA;IAG1C,KAAK,MAAKC,OAAL,CAAaC,EAAb,CAAgB,qBAAhB;MAAA,yFAAuC,iBAAOC,OAAP;QAAA;QAAA;UAAA;YAAA;cAAA;gBACnCC,WADmC,GACPD,OADO,CACnCC,WADmC,EACtBC,UADsB,GACPF,OADO,CACtBE,UADsB;gBAAA;gBAAA,OAEjB,MAAKC,gBAAL,CAAsBC,WAAtB,CAAkC,MAAlC,CAFiB;;cAAA;gBAErCA,WAFqC;;gBAAA,MAIvCA,WAAW,IAAIH,WAAW,KAAK,MAA/B,IAAyCC,UAAU,KAAK,SAJjB;kBAAA;kBAAA;gBAAA;;gBAAA;gBAAA,OAKtB,MAAKG,MAAL,CAAY,MAAZ,EAAoBC,WAApB,CAAgC,MAAKC,GAArC,CALsB;;cAAA;gBAKpCC,KALoC;gBAAA,iCAMnC;kBACNA,KAAK,EAALA;gBADM,CANmC;;cAAA;gBAAA,iCAUpC,EAVoC;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,CAAvC;;MAAA;QAAA;MAAA;IAAA,IAAL;IAaA,KAAK,MAAKV,OAAL,CAAaC,EAAb,CAAgB,qCAAhB,6FAAuD;MAAA;QAAA;UAAA;YAAA;cAAA,kCACpD;gBACNU,eAAe,EAAE,CAChB;kBACCd,IAAI,EAAE,4BADP;kBAECe,KAAK,EAAE,4BAFR;kBAGC,UAAQ,gCAHT;kBAICT,WAAW,EAAE;gBAJd,CADgB;cADX,CADoD;;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA,CAAvD,GAAL;IAhB0C;EA4B1C;;;;;+GAED;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACqB,KAAKI,MAAL,CAAY,MAAZ,EAAoBC,WAApB,CAAgC,KAAKC,GAArC,CADrB;;cAAA;gBACOC,KADP;gBAGC,KAAKG,OAAL,CAAa,YAAb,EAA2BC,GAA3B,CAA+B;kBAC9BC,EAAE,EAAE,IAD0B;kBAE9BC,SAAS,EAAE;gBAFmB,CAA/B;gBAHD,kCAQQ;kBAAEN,KAAK,EAALA;gBAAF,CARR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;EA5DwCO,4B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateAction.js","names":["viewTypeChoices","value","label","viewModels","sort","optionsSchema","id","description","fields","viewType","type","isRequired","options","choices","isRoot","nameReadable","namedTemplateItemBuilder","namePascal","viewModel","hint","map","model","followUpSchema","CreateAction","validateAndNormalizeOptions","writer","Writer","doesRootControllerExist","cwd","ui","confirm","form","FormComponent","schema","onWillAskQuestion","formUtil","onWillAskQuestionHandler","present","answers","prompt","namesUtil","toPascal","nameKebab","toKebab","files","Action","execute","syncResults","merged","actionUtil","mergeActionResults","AbstractAction"],"sources":["../../../../src/features/view/actions/CreateAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport FormComponent from '../../../components/FormComponent'\nimport namedTemplateItemBuilder from '../../../schemas/v2020_07_22/namedTemplateItem.builder'\nimport actionUtil from '../../../utilities/action.utility'\nimport formUtil from '../../../utilities/form.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst viewTypeChoices = [\n\t{\n\t\tvalue: 'skillView',\n\t\tlabel: 'Skill View Controller',\n\t},\n\t{\n\t\tvalue: 'view',\n\t\tlabel: 'View Controller',\n\t},\n]\n\nconst viewModels = [\n\t'BigForm',\n\t'Button',\n\t'Calendar',\n\t'Card',\n\t'CardBody',\n\t'CardHeader',\n\t'Dialog',\n\t'Form',\n\t'List',\n\t'CalendarEvent',\n].sort()\n\nconst optionsSchema = buildSchema({\n\tid: 'createViewOptions',\n\tdescription:\n\t\t'Create a new Heartwood view to render on web enabled and mobile devices.',\n\tfields: {\n\t\tviewType: {\n\t\t\ttype: 'select',\n\t\t\tlabel: 'Which are you creating?',\n\t\t\tisRequired: true,\n\t\t\toptions: {\n\t\t\t\tchoices: viewTypeChoices,\n\t\t\t},\n\t\t},\n\t\tisRoot: {\n\t\t\ttype: 'boolean',\n\t\t\tlabel: 'Make this the Root View Controller?',\n\t\t},\n\t\tnameReadable: {\n\t\t\t...namedTemplateItemBuilder.fields.nameReadable,\n\t\t\tlabel: 'Controller name',\n\t\t\tisRequired: false,\n\t\t},\n\t\tnamePascal: {\n\t\t\t...namedTemplateItemBuilder.fields.namePascal,\n\t\t\tisRequired: false,\n\t\t},\n\t\tviewModel: {\n\t\t\ttype: 'select',\n\t\t\tlabel: 'View model',\n\t\t\thint: 'Which type of view will your controller render?',\n\t\t\toptions: {\n\t\t\t\tchoices: viewModels.map((model) => ({ value: model, label: model })),\n\t\t\t},\n\t\t},\n\t},\n})\n\nconst followUpSchema = buildSchema({\n\tid: 'creatViewFollowup',\n\tfields: {\n\t\tnameReadable: {\n\t\t\t...optionsSchema.fields.nameReadable,\n\t\t\tisRequired: true,\n\t\t},\n\t\tnamePascal: {\n\t\t\t...optionsSchema.fields.namePascal,\n\t\t\tisRequired: true,\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\n\nexport default class CreateAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic commandAliases = ['create.view']\n\tpublic invocationMessage = 'Creating your new view controller... 🌲'\n\n\tpublic async execute(\n\t\toptions: SchemaValues<OptionsSchema>\n\t): Promise<FeatureActionResponse> {\n\t\tlet { viewType, isRoot, nameReadable, namePascal, viewModel } =\n\t\t\tthis.validateAndNormalizeOptions(options)\n\n\t\tconst writer = this.Writer('view')\n\n\t\tif (\n\t\t\tviewType === 'skillView' &&\n\t\t\t!isRoot &&\n\t\t\t!writer.doesRootControllerExist(this.cwd)\n\t\t) {\n\t\t\tisRoot = await this.ui.confirm(\n\t\t\t\t'Do you want to create a root view controller?'\n\t\t\t)\n\t\t}\n\n\t\tif (!isRoot && !nameReadable) {\n\t\t\tconst form = new FormComponent({\n\t\t\t\tui: this.ui,\n\t\t\t\tschema: followUpSchema,\n\t\t\t\tonWillAskQuestion: formUtil.onWillAskQuestionHandler,\n\t\t\t})\n\t\t\tconst answers = await form.present()\n\n\t\t\tnamePascal = answers.namePascal\n\t\t\tnameReadable = answers.nameReadable\n\t\t}\n\n\t\tif (isRoot) {\n\t\t\tnameReadable = 'Root'\n\t\t}\n\n\t\tif (!viewModel && viewType === 'view') {\n\t\t\tviewModel = await this.ui.prompt({\n\t\t\t\t...optionsSchema.fields.viewModel,\n\t\t\t\tisRequired: true,\n\t\t\t})\n\t\t}\n\n\t\tnamePascal = namePascal ?? namesUtil.toPascal(nameReadable as string)\n\n\t\tconst files = await writer[\n\t\t\tviewType === 'skillView'\n\t\t\t\t? 'writeSkillViewController'\n\t\t\t\t: 'writeViewController'\n\t\t](this.cwd, {\n\t\t\tviewType,\n\t\t\tnamePascal,\n\t\t\tviewModel: viewModel as string,\n\t\t\tnameKebab: namesUtil.toKebab(namePascal),\n\t\t})\n\n\t\tconst syncResults = await this.Action('view', 'sync').execute({})\n\n\t\tconst merged = actionUtil.mergeActionResults(\n\t\t\t{\n\t\t\t\tfiles,\n\t\t\t},\n\t\t\tsyncResults\n\t\t)\n\n\t\treturn merged\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;AAGA,IAAMA,eAAe,GAAG,CACvB;EACCC,KAAK,EAAE,WADR;EAECC,KAAK,EAAE;AAFR,CADuB,EAKvB;EACCD,KAAK,EAAE,MADR;EAECC,KAAK,EAAE;AAFR,CALuB,CAAxB;AAWA,IAAMC,UAAU,GAAG,CAClB,SADkB,EAElB,QAFkB,EAGlB,UAHkB,EAIlB,MAJkB,EAKlB,UALkB,EAMlB,YANkB,EAOlB,QAPkB,EAQlB,MARkB,EASlB,MATkB,EAUlB,eAVkB,EAWjBC,IAXiB,EAAnB;AAaA,IAAMC,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"CreateAction.js","names":["viewTypeChoices","value","label","viewModels","sort","optionsSchema","buildSchema","id","description","fields","viewType","type","isRequired","options","choices","isRoot","nameReadable","namedTemplateItemBuilder","namePascal","viewModel","hint","map","model","followUpSchema","CreateAction","validateAndNormalizeOptions","writer","Writer","doesRootControllerExist","cwd","ui","confirm","form","FormComponent","schema","onWillAskQuestion","formUtil","onWillAskQuestionHandler","present","answers","prompt","namesUtil","toPascal","nameKebab","toKebab","files","Action","execute","syncResults","merged","actionUtil","mergeActionResults","AbstractAction"],"sources":["../../../../src/features/view/actions/CreateAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport FormComponent from '../../../components/FormComponent'\nimport namedTemplateItemBuilder from '../../../schemas/v2020_07_22/namedTemplateItem.builder'\nimport actionUtil from '../../../utilities/action.utility'\nimport formUtil from '../../../utilities/form.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst viewTypeChoices = [\n\t{\n\t\tvalue: 'skillView',\n\t\tlabel: 'Skill View Controller',\n\t},\n\t{\n\t\tvalue: 'view',\n\t\tlabel: 'View Controller',\n\t},\n]\n\nconst viewModels = [\n\t'BigForm',\n\t'Button',\n\t'Calendar',\n\t'Card',\n\t'CardBody',\n\t'CardHeader',\n\t'Dialog',\n\t'Form',\n\t'List',\n\t'CalendarEvent',\n].sort()\n\nconst optionsSchema = buildSchema({\n\tid: 'createViewOptions',\n\tdescription:\n\t\t'Create a new Heartwood view to render on web enabled and mobile devices.',\n\tfields: {\n\t\tviewType: {\n\t\t\ttype: 'select',\n\t\t\tlabel: 'Which are you creating?',\n\t\t\tisRequired: true,\n\t\t\toptions: {\n\t\t\t\tchoices: viewTypeChoices,\n\t\t\t},\n\t\t},\n\t\tisRoot: {\n\t\t\ttype: 'boolean',\n\t\t\tlabel: 'Make this the Root View Controller?',\n\t\t},\n\t\tnameReadable: {\n\t\t\t...namedTemplateItemBuilder.fields.nameReadable,\n\t\t\tlabel: 'Controller name',\n\t\t\tisRequired: false,\n\t\t},\n\t\tnamePascal: {\n\t\t\t...namedTemplateItemBuilder.fields.namePascal,\n\t\t\tisRequired: false,\n\t\t},\n\t\tviewModel: {\n\t\t\ttype: 'select',\n\t\t\tlabel: 'View model',\n\t\t\thint: 'Which type of view will your controller render?',\n\t\t\toptions: {\n\t\t\t\tchoices: viewModels.map((model) => ({ value: model, label: model })),\n\t\t\t},\n\t\t},\n\t},\n})\n\nconst followUpSchema = buildSchema({\n\tid: 'creatViewFollowup',\n\tfields: {\n\t\tnameReadable: {\n\t\t\t...optionsSchema.fields.nameReadable,\n\t\t\tisRequired: true,\n\t\t},\n\t\tnamePascal: {\n\t\t\t...optionsSchema.fields.namePascal,\n\t\t\tisRequired: true,\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\n\nexport default class CreateAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic commandAliases = ['create.view']\n\tpublic invocationMessage = 'Creating your new view controller... 🌲'\n\n\tpublic async execute(\n\t\toptions: SchemaValues<OptionsSchema>\n\t): Promise<FeatureActionResponse> {\n\t\tlet { viewType, isRoot, nameReadable, namePascal, viewModel } =\n\t\t\tthis.validateAndNormalizeOptions(options)\n\n\t\tconst writer = this.Writer('view')\n\n\t\tif (\n\t\t\tviewType === 'skillView' &&\n\t\t\t!isRoot &&\n\t\t\t!writer.doesRootControllerExist(this.cwd)\n\t\t) {\n\t\t\tisRoot = await this.ui.confirm(\n\t\t\t\t'Do you want to create a root view controller?'\n\t\t\t)\n\t\t}\n\n\t\tif (!isRoot && !nameReadable) {\n\t\t\tconst form = new FormComponent({\n\t\t\t\tui: this.ui,\n\t\t\t\tschema: followUpSchema,\n\t\t\t\tonWillAskQuestion: formUtil.onWillAskQuestionHandler,\n\t\t\t})\n\t\t\tconst answers = await form.present()\n\n\t\t\tnamePascal = answers.namePascal\n\t\t\tnameReadable = answers.nameReadable\n\t\t}\n\n\t\tif (isRoot) {\n\t\t\tnameReadable = 'Root'\n\t\t}\n\n\t\tif (!viewModel && viewType === 'view') {\n\t\t\tviewModel = await this.ui.prompt({\n\t\t\t\t...optionsSchema.fields.viewModel,\n\t\t\t\tisRequired: true,\n\t\t\t})\n\t\t}\n\n\t\tnamePascal = namePascal ?? namesUtil.toPascal(nameReadable as string)\n\n\t\tconst files = await writer[\n\t\t\tviewType === 'skillView'\n\t\t\t\t? 'writeSkillViewController'\n\t\t\t\t: 'writeViewController'\n\t\t](this.cwd, {\n\t\t\tviewType,\n\t\t\tnamePascal,\n\t\t\tviewModel: viewModel as string,\n\t\t\tnameKebab: namesUtil.toKebab(namePascal),\n\t\t})\n\n\t\tconst syncResults = await this.Action('view', 'sync').execute({})\n\n\t\tconst merged = actionUtil.mergeActionResults(\n\t\t\t{\n\t\t\t\tfiles,\n\t\t\t},\n\t\t\tsyncResults\n\t\t)\n\n\t\treturn merged\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateThemeAction.js","names":["optionsSchema","id","description","fields","CreateThemeAction","_options","writer","Writer","doesThemeFileExist","cwd","errors","SpruceError","code","events","getFeature","syncResults","hasBeenSynced","Action","execute","writeTheme","files","results","actionUtil","mergeActionResults","AbstractAction"],"sources":["../../../../src/features/view/actions/CreateThemeAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport SpruceError from '../../../errors/SpruceError'\nimport actionUtil from '../../../utilities/action.utility'\nimport AbstractAction from '../../AbstractAction'\n\nconst optionsSchema = buildSchema({\n\tid: 'createThemeOptions',\n\tdescription: 'Create a theme for your skill.',\n\tfields: {},\n})\n\ntype OptionsSchema = typeof optionsSchema\n\nexport default class CreateThemeAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = ['create.theme']\n\tpublic invocationMessage = `Let's get pretty! 🤩`\n\n\tpublic async execute(_options: SchemaValues<OptionsSchema>) {\n\t\tconst writer = this.Writer('view')\n\n\t\tif (writer.doesThemeFileExist(this.cwd)) {\n\t\t\treturn {\n\t\t\t\terrors: [\n\t\t\t\t\tnew SpruceError({\n\t\t\t\t\t\tcode: 'THEME_EXISTS',\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t}\n\t\t}\n\n\t\tconst events = this.getFeature('event')\n\t\tlet syncResults = {}\n\n\t\tif (!events.hasBeenSynced()) {\n\t\t\tsyncResults = await this.Action('event', 'sync').execute({})\n\t\t}\n\n\t\tconst files = await writer.writeTheme(this.cwd)\n\t\tconst results = { files }\n\n\t\treturn actionUtil.mergeActionResults(syncResults, results)\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;AAEA,IAAMA,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"CreateThemeAction.js","names":["optionsSchema","buildSchema","id","description","fields","CreateThemeAction","_options","writer","Writer","doesThemeFileExist","cwd","errors","SpruceError","code","events","getFeature","syncResults","hasBeenSynced","Action","execute","writeTheme","files","results","actionUtil","mergeActionResults","AbstractAction"],"sources":["../../../../src/features/view/actions/CreateThemeAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport SpruceError from '../../../errors/SpruceError'\nimport actionUtil from '../../../utilities/action.utility'\nimport AbstractAction from '../../AbstractAction'\n\nconst optionsSchema = buildSchema({\n\tid: 'createThemeOptions',\n\tdescription: 'Create a theme for your skill.',\n\tfields: {},\n})\n\ntype OptionsSchema = typeof optionsSchema\n\nexport default class CreateThemeAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema = optionsSchema\n\tpublic commandAliases = ['create.theme']\n\tpublic invocationMessage = `Let's get pretty! 🤩`\n\n\tpublic async execute(_options: SchemaValues<OptionsSchema>) {\n\t\tconst writer = this.Writer('view')\n\n\t\tif (writer.doesThemeFileExist(this.cwd)) {\n\t\t\treturn {\n\t\t\t\terrors: [\n\t\t\t\t\tnew SpruceError({\n\t\t\t\t\t\tcode: 'THEME_EXISTS',\n\t\t\t\t\t}),\n\t\t\t\t],\n\t\t\t}\n\t\t}\n\n\t\tconst events = this.getFeature('event')\n\t\tlet syncResults = {}\n\n\t\tif (!events.hasBeenSynced()) {\n\t\t\tsyncResults = await this.Action('event', 'sync').execute({})\n\t\t}\n\n\t\tconst files = await writer.writeTheme(this.cwd)\n\t\tconst results = { files }\n\n\t\treturn actionUtil.mergeActionResults(syncResults, results)\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;AAEA,IAAMA,aAAa,GAAG,IAAAC,mBAAA,EAAY;EACjCC,EAAE,EAAE,oBAD6B;EAEjCC,WAAW,EAAE,gCAFoB;EAGjCC,MAAM,EAAE;AAHyB,CAAZ,CAAtB;;IAQqBC,iB;;;;;;;;;;;;;;;sGACGL,a;uGACC,CAAC,cAAD,C;;;;;;;;mGAGxB,iBAAqBM,QAArB;QAAA;QAAA;UAAA;YAAA;cAAA;gBACOC,MADP,GACgB,KAAKC,MAAL,CAAY,MAAZ,CADhB;;gBAAA,KAGKD,MAAM,CAACE,kBAAP,CAA0B,KAAKC,GAA/B,CAHL;kBAAA;kBAAA;gBAAA;;gBAAA,iCAIS;kBACNC,MAAM,EAAE,CACP,IAAIC,uBAAJ,CAAgB;oBACfC,IAAI,EAAE;kBADS,CAAhB,CADO;gBADF,CAJT;;cAAA;gBAaOC,MAbP,GAagB,KAAKC,UAAL,CAAgB,OAAhB,CAbhB;gBAcKC,WAdL,GAcmB,EAdnB;;gBAAA,IAgBMF,MAAM,CAACG,aAAP,EAhBN;kBAAA;kBAAA;gBAAA;;gBAAA;gBAAA,OAiBsB,KAAKC,MAAL,CAAY,OAAZ,EAAqB,MAArB,EAA6BC,OAA7B,CAAqC,EAArC,CAjBtB;;cAAA;gBAiBEH,WAjBF;;cAAA;gBAAA;gBAAA,OAoBqBT,MAAM,CAACa,UAAP,CAAkB,KAAKV,GAAvB,CApBrB;;cAAA;gBAoBOW,KApBP;gBAqBOC,OArBP,GAqBiB;kBAAED,KAAK,EAALA;gBAAF,CArBjB;gBAAA,iCAuBQE,kBAAA,CAAWC,kBAAX,CAA8BR,WAA9B,EAA2CM,OAA3C,CAvBR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;EAL8CG,2B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SyncAction.js","names":["optionsSchema","id","description","fields","SyncAction","_options","targetDir","diskUtil","resolvePath","cwd","matches","length","paths","map","m","introspect","introspectionUtil","vcTemplateItems","svcTemplateItems","forEach","classes","thisClass","mapIntrospectedClassToTemplateItem","vc","svc","push","Store","loadCurrentSkillsNamespace","namespace","Writer","writeCombinedViewsFile","namespaceKebab","namesUtil","toKebab","files","c","item","staticProperties","namePascal","className","path","classPath","endsWith","AbstractAction"],"sources":["../../../../src/features/view/actions/SyncAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { diskUtil, namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport globby from 'globby'\nimport { VcTemplateItem } from '../../../../../spruce-templates/build'\nimport introspectionUtil, {\n\tIntrospectionClass,\n} from '../../../utilities/introspection.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'syncViewsOptions',\n\tdescription: 'Keep types and generated files based on views in sync.',\n\tfields: {},\n})\n\ntype OptionsSchema = typeof optionsSchema\n\nexport default class SyncAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic commandAliases = ['sync.views']\n\tpublic invocationMessage = 'Syncing view controller types... 🌲'\n\n\tpublic async execute(\n\t\t_options: SchemaValues<OptionsSchema>\n\t): Promise<FeatureActionResponse> {\n\t\tconst targetDir = diskUtil.resolvePath(this.cwd, 'src')\n\t\tconst matches = await globby(['**/*.svc.ts', '**/*.vc.ts'], {\n\t\t\tcwd: targetDir,\n\t\t})\n\n\t\tif (matches.length === 0) {\n\t\t\treturn {}\n\t\t}\n\n\t\tconst paths = matches.map((m) => diskUtil.resolvePath(targetDir, m))\n\t\tconst introspect = introspectionUtil.introspect(paths)\n\n\t\tconst vcTemplateItems: VcTemplateItem[] = []\n\t\tconst svcTemplateItems: VcTemplateItem[] = []\n\n\t\tintrospect.forEach(({ classes }) => {\n\t\t\tfor (const thisClass of classes) {\n\t\t\t\tconst { vc, svc } = this.mapIntrospectedClassToTemplateItem(thisClass)\n\n\t\t\t\tif (vc) {\n\t\t\t\t\tvcTemplateItems.push(vc)\n\t\t\t\t} else if (svc) {\n\t\t\t\t\tsvcTemplateItems.push(svc)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tconst namespace = await this.Store('skill').loadCurrentSkillsNamespace()\n\t\tconst files = await this.Writer('view').writeCombinedViewsFile(this.cwd, {\n\t\t\tnamespaceKebab: namesUtil.toKebab(namespace),\n\t\t\tvcTemplateItems,\n\t\t\tsvcTemplateItems,\n\t\t})\n\n\t\treturn {\n\t\t\tfiles,\n\t\t}\n\t}\n\n\tprivate mapIntrospectedClassToTemplateItem(c: IntrospectionClass): {\n\t\tvc?: VcTemplateItem\n\t\tsvc?: VcTemplateItem\n\t} {\n\t\tconst item = {\n\t\t\tid: c.staticProperties.id,\n\t\t\tnamePascal: c.className,\n\t\t\tpath: c.classPath,\n\t\t}\n\n\t\tlet vc: VcTemplateItem | undefined\n\t\tlet svc: VcTemplateItem | undefined\n\n\t\tif (c.classPath.endsWith('.svc.ts')) {\n\t\t\tsvc = item\n\t\t} else {\n\t\t\tvc = item\n\t\t}\n\n\t\treturn { svc, vc }\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;AAGA;;;;;;;;;;;;AAGA,IAAMA,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"SyncAction.js","names":["optionsSchema","buildSchema","id","description","fields","SyncAction","_options","targetDir","diskUtil","resolvePath","cwd","globby","matches","length","paths","map","m","introspect","introspectionUtil","vcTemplateItems","svcTemplateItems","forEach","classes","thisClass","mapIntrospectedClassToTemplateItem","vc","svc","push","Store","loadCurrentSkillsNamespace","namespace","Writer","writeCombinedViewsFile","namespaceKebab","namesUtil","toKebab","files","c","item","staticProperties","namePascal","className","path","classPath","endsWith","AbstractAction"],"sources":["../../../../src/features/view/actions/SyncAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { diskUtil, namesUtil } from '@sprucelabs/spruce-skill-utils'\nimport globby from 'globby'\nimport { VcTemplateItem } from '../../../../../spruce-templates/build'\nimport introspectionUtil, {\n\tIntrospectionClass,\n} from '../../../utilities/introspection.utility'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\n\nconst optionsSchema = buildSchema({\n\tid: 'syncViewsOptions',\n\tdescription: 'Keep types and generated files based on views in sync.',\n\tfields: {},\n})\n\ntype OptionsSchema = typeof optionsSchema\n\nexport default class SyncAction extends AbstractAction<OptionsSchema> {\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic commandAliases = ['sync.views']\n\tpublic invocationMessage = 'Syncing view controller types... 🌲'\n\n\tpublic async execute(\n\t\t_options: SchemaValues<OptionsSchema>\n\t): Promise<FeatureActionResponse> {\n\t\tconst targetDir = diskUtil.resolvePath(this.cwd, 'src')\n\t\tconst matches = await globby(['**/*.svc.ts', '**/*.vc.ts'], {\n\t\t\tcwd: targetDir,\n\t\t})\n\n\t\tif (matches.length === 0) {\n\t\t\treturn {}\n\t\t}\n\n\t\tconst paths = matches.map((m) => diskUtil.resolvePath(targetDir, m))\n\t\tconst introspect = introspectionUtil.introspect(paths)\n\n\t\tconst vcTemplateItems: VcTemplateItem[] = []\n\t\tconst svcTemplateItems: VcTemplateItem[] = []\n\n\t\tintrospect.forEach(({ classes }) => {\n\t\t\tfor (const thisClass of classes) {\n\t\t\t\tconst { vc, svc } = this.mapIntrospectedClassToTemplateItem(thisClass)\n\n\t\t\t\tif (vc) {\n\t\t\t\t\tvcTemplateItems.push(vc)\n\t\t\t\t} else if (svc) {\n\t\t\t\t\tsvcTemplateItems.push(svc)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tconst namespace = await this.Store('skill').loadCurrentSkillsNamespace()\n\t\tconst files = await this.Writer('view').writeCombinedViewsFile(this.cwd, {\n\t\t\tnamespaceKebab: namesUtil.toKebab(namespace),\n\t\t\tvcTemplateItems,\n\t\t\tsvcTemplateItems,\n\t\t})\n\n\t\treturn {\n\t\t\tfiles,\n\t\t}\n\t}\n\n\tprivate mapIntrospectedClassToTemplateItem(c: IntrospectionClass): {\n\t\tvc?: VcTemplateItem\n\t\tsvc?: VcTemplateItem\n\t} {\n\t\tconst item = {\n\t\t\tid: c.staticProperties.id,\n\t\t\tnamePascal: c.className,\n\t\t\tpath: c.classPath,\n\t\t}\n\n\t\tlet vc: VcTemplateItem | undefined\n\t\tlet svc: VcTemplateItem | undefined\n\n\t\tif (c.classPath.endsWith('.svc.ts')) {\n\t\t\tsvc = item\n\t\t} else {\n\t\t\tvc = item\n\t\t}\n\n\t\treturn { svc, vc }\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WatchAction.js","names":["optionsSchema","id","description","fields","shouldReturnImmediately","type","hint","WatchAction","options","validateAndNormalizeOptions","watchFeature","featureInstaller","getFeature","startWatching","delay","Store","loadCurrentSkill","skill","skillName","name","boot","bootControls","emitter","on","kill","Promise","resolve","stopWatching","summaryLines","meta","bootPromise","remote","Service","getRemote","heartwoodRemoteUtil","buildUrl","bootMessage","resetUi","Action","execute","onData","msg","includes","ui","stopLoading","renderLine","trim","startLoading","onError","GraphicsTextEffect","Red","results","then","errors","clear","renderHero","renderDivider","renderLines","getPreviewUrl","pid","AbstractAction"],"sources":["../../../../src/features/view/actions/WatchAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { heartwoodRemoteUtil } from '@sprucelabs/spruce-event-utils'\nimport { GraphicsTextEffect } from '@sprucelabs/spruce-skill-utils'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport { BootMeta } from '../../skill/actions/BootAction'\nimport WatchFeature from '../../watch/WatchFeature'\n\nconst optionsSchema = buildSchema({\n\tid: 'watchViewsOptions',\n\tdescription: 'Watch for view changes and preview them in real time.',\n\tfields: {\n\t\tshouldReturnImmediately: {\n\t\t\ttype: 'boolean',\n\t\t\thint: \"For testing so we don't wait until the process is killed to get the results.\",\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class WatchAction extends AbstractAction<OptionsSchema> {\n\tpublic commandAliases = ['watch.views']\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic invocationMessage = 'Watching views... 🤩'\n\tprivate resolve?: () => void\n\tprivate bootControls?: BootMeta\n\tprivate skillName!: string\n\tprivate bootMessage!: string\n\tprivate watchFeature!: WatchFeature\n\n\tpublic async execute(options?: Options): Promise<FeatureActionResponse> {\n\t\tconst { shouldReturnImmediately } = this.validateAndNormalizeOptions(\n\t\t\toptions ?? {}\n\t\t)\n\n\t\tthis.watchFeature = this.featureInstaller.getFeature('watch')\n\t\tawait this.watchFeature.startWatching({ delay: 2000 })\n\n\t\tconst skill = await this.Store('skill').loadCurrentSkill()\n\n\t\tthis.skillName = skill.name\n\t\tthis.bootControls = await this.boot()\n\n\t\tawait this.emitter.on('watcher.did-detect-change', async () => {\n\t\t\tthis.bootControls?.kill()\n\t\t\tthis.bootControls = await this.boot(\n\t\t\t\t'Changes detected, rebooting skill...'\n\t\t\t)\n\t\t})\n\n\t\tif (!shouldReturnImmediately) {\n\t\t\tawait new Promise((resolve) => {\n\t\t\t\t//@ts-ignore\n\t\t\t\tthis.resolve = resolve\n\t\t\t})\n\n\t\t\tawait this.watchFeature.stopWatching()\n\t\t\tthis.bootControls?.kill()\n\t\t}\n\n\t\treturn {\n\t\t\tsummaryLines: [`Done watching...`],\n\t\t\tmeta: {\n\t\t\t\tbootPromise: this.bootControls.bootPromise,\n\t\t\t},\n\t\t}\n\t}\n\n\tprivate getPreviewUrl() {\n\t\tconst remote = this.Service('remote').getRemote() as any\n\t\treturn heartwoodRemoteUtil.buildUrl(remote) + '/#views/heartwood.watch'\n\t}\n\n\tprivate async boot(bootMessage = 'Booting skill...') {\n\t\tthis.bootMessage = bootMessage\n\t\tthis.resetUi()\n\n\t\tconst results = await this.Action('skill', 'boot').execute({\n\t\t\tshouldReturnImmediately: true,\n\t\t\tonData: (msg: string) => {\n\t\t\t\tif (!msg.includes('node build/index') && !msg.includes('yarn run')) {\n\t\t\t\t\tthis.ui.stopLoading()\n\t\t\t\t\tthis.ui.renderLine(msg.trim())\n\t\t\t\t\tthis.ui.startLoading(this.bootMessage)\n\t\t\t\t}\n\t\t\t},\n\t\t\tonError: (msg: string) => {\n\t\t\t\tif (!msg.includes('No license field')) {\n\t\t\t\t\tthis.ui.stopLoading()\n\t\t\t\t\tthis.ui.renderLine(msg, [GraphicsTextEffect.Red])\n\t\t\t\t\tthis.ui.startLoading()\n\t\t\t\t}\n\t\t\t},\n\t\t})\n\n\t\tresults.meta?.bootPromise?.then(() => {\n\t\t\tthis.bootMessage = 'Skill booted. Waiting for changes...'\n\t\t\tthis.ui.startLoading(this.bootMessage)\n\t\t})\n\n\t\tif (results.errors) {\n\t\t\tthrow results.errors[0]\n\t\t}\n\n\t\treturn results.meta as BootMeta\n\t}\n\n\tprivate resetUi() {\n\t\tthis.ui.clear()\n\t\tthis.ui.renderHero('Heartwood')\n\t\tthis.ui.renderDivider()\n\t\tthis.ui.renderLines([\n\t\t\t'',\n\t\t\t`Skill: ${this.skillName}`,\n\t\t\t`Preview: ${this.getPreviewUrl()}`,\n\t\t\t'',\n\t\t])\n\t\tthis.ui.renderDivider()\n\t\tthis.ui.renderLine('')\n\t\tthis.ui.startLoading(this.bootMessage)\n\t}\n\n\tpublic async kill() {\n\t\tawait this.watchFeature.stopWatching()\n\t\tthis.bootControls?.kill()\n\t\tthis.resolve?.()\n\t}\n\n\tpublic getPid() {\n\t\treturn this.bootControls?.pid\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;;;;;AAKA,IAAMA,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"WatchAction.js","names":["optionsSchema","buildSchema","id","description","fields","shouldReturnImmediately","type","hint","WatchAction","options","validateAndNormalizeOptions","watchFeature","featureInstaller","getFeature","startWatching","delay","Store","loadCurrentSkill","skill","skillName","name","boot","bootControls","emitter","on","kill","Promise","resolve","stopWatching","summaryLines","meta","bootPromise","remote","Service","getRemote","heartwoodRemoteUtil","buildUrl","bootMessage","resetUi","Action","execute","onData","msg","includes","ui","stopLoading","renderLine","trim","startLoading","onError","GraphicsTextEffect","Red","results","then","errors","clear","renderHero","renderDivider","renderLines","getPreviewUrl","pid","AbstractAction"],"sources":["../../../../src/features/view/actions/WatchAction.ts"],"sourcesContent":["import { buildSchema, SchemaValues } from '@sprucelabs/schema'\nimport { heartwoodRemoteUtil } from '@sprucelabs/spruce-event-utils'\nimport { GraphicsTextEffect } from '@sprucelabs/spruce-skill-utils'\nimport AbstractAction from '../../AbstractAction'\nimport { FeatureActionResponse } from '../../features.types'\nimport { BootMeta } from '../../skill/actions/BootAction'\nimport WatchFeature from '../../watch/WatchFeature'\n\nconst optionsSchema = buildSchema({\n\tid: 'watchViewsOptions',\n\tdescription: 'Watch for view changes and preview them in real time.',\n\tfields: {\n\t\tshouldReturnImmediately: {\n\t\t\ttype: 'boolean',\n\t\t\thint: \"For testing so we don't wait until the process is killed to get the results.\",\n\t\t},\n\t},\n})\n\ntype OptionsSchema = typeof optionsSchema\ntype Options = SchemaValues<OptionsSchema>\n\nexport default class WatchAction extends AbstractAction<OptionsSchema> {\n\tpublic commandAliases = ['watch.views']\n\tpublic optionsSchema: OptionsSchema = optionsSchema\n\tpublic invocationMessage = 'Watching views... 🤩'\n\tprivate resolve?: () => void\n\tprivate bootControls?: BootMeta\n\tprivate skillName!: string\n\tprivate bootMessage!: string\n\tprivate watchFeature!: WatchFeature\n\n\tpublic async execute(options?: Options): Promise<FeatureActionResponse> {\n\t\tconst { shouldReturnImmediately } = this.validateAndNormalizeOptions(\n\t\t\toptions ?? {}\n\t\t)\n\n\t\tthis.watchFeature = this.featureInstaller.getFeature('watch')\n\t\tawait this.watchFeature.startWatching({ delay: 2000 })\n\n\t\tconst skill = await this.Store('skill').loadCurrentSkill()\n\n\t\tthis.skillName = skill.name\n\t\tthis.bootControls = await this.boot()\n\n\t\tawait this.emitter.on('watcher.did-detect-change', async () => {\n\t\t\tthis.bootControls?.kill()\n\t\t\tthis.bootControls = await this.boot(\n\t\t\t\t'Changes detected, rebooting skill...'\n\t\t\t)\n\t\t})\n\n\t\tif (!shouldReturnImmediately) {\n\t\t\tawait new Promise((resolve) => {\n\t\t\t\t//@ts-ignore\n\t\t\t\tthis.resolve = resolve\n\t\t\t})\n\n\t\t\tawait this.watchFeature.stopWatching()\n\t\t\tthis.bootControls?.kill()\n\t\t}\n\n\t\treturn {\n\t\t\tsummaryLines: [`Done watching...`],\n\t\t\tmeta: {\n\t\t\t\tbootPromise: this.bootControls.bootPromise,\n\t\t\t},\n\t\t}\n\t}\n\n\tprivate getPreviewUrl() {\n\t\tconst remote = this.Service('remote').getRemote() as any\n\t\treturn heartwoodRemoteUtil.buildUrl(remote) + '/#views/heartwood.watch'\n\t}\n\n\tprivate async boot(bootMessage = 'Booting skill...') {\n\t\tthis.bootMessage = bootMessage\n\t\tthis.resetUi()\n\n\t\tconst results = await this.Action('skill', 'boot').execute({\n\t\t\tshouldReturnImmediately: true,\n\t\t\tonData: (msg: string) => {\n\t\t\t\tif (!msg.includes('node build/index') && !msg.includes('yarn run')) {\n\t\t\t\t\tthis.ui.stopLoading()\n\t\t\t\t\tthis.ui.renderLine(msg.trim())\n\t\t\t\t\tthis.ui.startLoading(this.bootMessage)\n\t\t\t\t}\n\t\t\t},\n\t\t\tonError: (msg: string) => {\n\t\t\t\tif (!msg.includes('No license field')) {\n\t\t\t\t\tthis.ui.stopLoading()\n\t\t\t\t\tthis.ui.renderLine(msg, [GraphicsTextEffect.Red])\n\t\t\t\t\tthis.ui.startLoading()\n\t\t\t\t}\n\t\t\t},\n\t\t})\n\n\t\tresults.meta?.bootPromise?.then(() => {\n\t\t\tthis.bootMessage = 'Skill booted. Waiting for changes...'\n\t\t\tthis.ui.startLoading(this.bootMessage)\n\t\t})\n\n\t\tif (results.errors) {\n\t\t\tthrow results.errors[0]\n\t\t}\n\n\t\treturn results.meta as BootMeta\n\t}\n\n\tprivate resetUi() {\n\t\tthis.ui.clear()\n\t\tthis.ui.renderHero('Heartwood')\n\t\tthis.ui.renderDivider()\n\t\tthis.ui.renderLines([\n\t\t\t'',\n\t\t\t`Skill: ${this.skillName}`,\n\t\t\t`Preview: ${this.getPreviewUrl()}`,\n\t\t\t'',\n\t\t])\n\t\tthis.ui.renderDivider()\n\t\tthis.ui.renderLine('')\n\t\tthis.ui.startLoading(this.bootMessage)\n\t}\n\n\tpublic async kill() {\n\t\tawait this.watchFeature.stopWatching()\n\t\tthis.bootControls?.kill()\n\t\tthis.resolve?.()\n\t}\n\n\tpublic getPid() {\n\t\treturn this.bootControls?.pid\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewStore.js","names":["ViewStore","connectToApi","shouldAuthAsCurrentSkill","client","skill","Service","getCurrentSkill","SpruceError","code","friendlyMessage","emit","target","namespace","slug","results","views","eventResponseUtil","getFirstResponseOrThrow","AbstractStore"],"sources":["../../../../src/features/view/stores/ViewStore.ts"],"sourcesContent":["import { eventResponseUtil } from '@sprucelabs/spruce-event-utils'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractStore from '../../../stores/AbstractStore'\n\nexport default class ViewStore extends AbstractStore {\n\tpublic name = 'view'\n\n\tpublic async fetchSkillViews() {\n\t\tconst client = await this.connectToApi({ shouldAuthAsCurrentSkill: true })\n\t\tconst skill = this.Service('auth').getCurrentSkill()\n\n\t\tif (!skill) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'SKILL_NOT_REGISTERED',\n\t\t\t\tfriendlyMessage: `You can't get skill views without being registered. Try \\`spruce register\\``,\n\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\tconst results = await client.emit(\n\t\t\t\t'heartwood.get-skill-views::v2021_02_11',\n\t\t\t\t{\n\t\t\t\t\ttarget: {\n\t\t\t\t\t\tnamespace: skill.slug,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t)\n\n\t\t\tconst views = eventResponseUtil.getFirstResponseOrThrow(results)\n\n\t\t\treturn views\n\t\t} catch (err) {\n\t\t\treturn null\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;IAEqBA,S;;;;;;;;;;;;;;;6FACN,M;;;;;;;2GAEd;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACsB,KAAKC,YAAL,CAAkB;kBAAEC,wBAAwB,EAAE;gBAA5B,CAAlB,CADtB;;cAAA;gBACOC,MADP;gBAEOC,KAFP,GAEe,KAAKC,OAAL,CAAa,MAAb,EAAqBC,eAArB,EAFf;;gBAAA,IAIMF,KAJN;kBAAA;kBAAA;gBAAA;;gBAAA,MAKQ,IAAIG,uBAAJ,CAAgB;kBACrBC,IAAI,EAAE,sBADe;kBAErBC,eAAe;gBAFM,CAAhB,CALR;;cAAA;gBAAA;gBAAA;gBAAA,OAYwBN,MAAM,CAACO,IAAP,CACrB,wCADqB,EAErB;kBACCC,MAAM,EAAE;oBACPC,SAAS,EAAER,KAAK,CAACS;kBADV;gBADT,CAFqB,CAZxB;;cAAA;gBAYQC,OAZR;gBAqBQC,KArBR,GAqBgBC,
|
|
1
|
+
{"version":3,"file":"ViewStore.js","names":["ViewStore","connectToApi","shouldAuthAsCurrentSkill","client","skill","Service","getCurrentSkill","SpruceError","code","friendlyMessage","emit","target","namespace","slug","results","views","eventResponseUtil","getFirstResponseOrThrow","AbstractStore"],"sources":["../../../../src/features/view/stores/ViewStore.ts"],"sourcesContent":["import { eventResponseUtil } from '@sprucelabs/spruce-event-utils'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractStore from '../../../stores/AbstractStore'\n\nexport default class ViewStore extends AbstractStore {\n\tpublic name = 'view'\n\n\tpublic async fetchSkillViews() {\n\t\tconst client = await this.connectToApi({ shouldAuthAsCurrentSkill: true })\n\t\tconst skill = this.Service('auth').getCurrentSkill()\n\n\t\tif (!skill) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'SKILL_NOT_REGISTERED',\n\t\t\t\tfriendlyMessage: `You can't get skill views without being registered. Try \\`spruce register\\``,\n\t\t\t})\n\t\t}\n\n\t\ttry {\n\t\t\tconst results = await client.emit(\n\t\t\t\t'heartwood.get-skill-views::v2021_02_11',\n\t\t\t\t{\n\t\t\t\t\ttarget: {\n\t\t\t\t\t\tnamespace: skill.slug,\n\t\t\t\t\t},\n\t\t\t\t}\n\t\t\t)\n\n\t\t\tconst views = eventResponseUtil.getFirstResponseOrThrow(results)\n\n\t\t\treturn views\n\t\t} catch (err) {\n\t\t\treturn null\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;;;;;IAEqBA,S;;;;;;;;;;;;;;;6FACN,M;;;;;;;2GAEd;QAAA;QAAA;UAAA;YAAA;cAAA;gBAAA;gBAAA,OACsB,KAAKC,YAAL,CAAkB;kBAAEC,wBAAwB,EAAE;gBAA5B,CAAlB,CADtB;;cAAA;gBACOC,MADP;gBAEOC,KAFP,GAEe,KAAKC,OAAL,CAAa,MAAb,EAAqBC,eAArB,EAFf;;gBAAA,IAIMF,KAJN;kBAAA;kBAAA;gBAAA;;gBAAA,MAKQ,IAAIG,uBAAJ,CAAgB;kBACrBC,IAAI,EAAE,sBADe;kBAErBC,eAAe;gBAFM,CAAhB,CALR;;cAAA;gBAAA;gBAAA;gBAAA,OAYwBN,MAAM,CAACO,IAAP,CACrB,wCADqB,EAErB;kBACCC,MAAM,EAAE;oBACPC,SAAS,EAAER,KAAK,CAACS;kBADV;gBADT,CAFqB,CAZxB;;cAAA;gBAYQC,OAZR;gBAqBQC,KArBR,GAqBgBC,mCAAA,CAAkBC,uBAAlB,CAA0CH,OAA1C,CArBhB;gBAAA,iCAuBSC,KAvBT;;cAAA;gBAAA;gBAAA;gBAAA,iCAyBS,IAzBT;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;EAHsCG,0B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewWriter.js","names":["ViewWriter","cwd","options","buildViewControllerPath","namePascal","path","writeController","viewType","vcTemplateItems","svcTemplateItems","rest","destinationDir","diskUtil","resolveHashSprucePath","destination","resolvePath","removeFileExtensionsFromTemplateItems","contents","templates","views","writeFileIfChangedMixinResults","results","map","i","resolveRelativePath","replace","viewModel","nameKebab","doesFileExist","SpruceError","code","name","skillViewController","viewController","lint","pluginContents","viewPlugin","buildThemePath","theme","ext","filename","AbstractWriter"],"sources":["../../../../src/features/view/writers/ViewWriter.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport {\n\tVcTemplateItem,\n\tViewsOptions,\n} from '../../../../../spruce-templates/build'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractWriter from '../../../writers/AbstractWriter'\n\nexport default class ViewWriter extends AbstractWriter {\n\tpublic writeSkillViewController(\n\t\tcwd: string,\n\t\toptions: {\n\t\t\tnamePascal: string\n\t\t\tnameKebab: string\n\t\t}\n\t) {\n\t\tconst { path } = this.buildViewControllerPath(\n\t\t\tcwd,\n\t\t\t'skillView',\n\t\t\toptions.namePascal\n\t\t)\n\n\t\treturn this.writeController(path, { ...options, viewType: 'skillView' })\n\t}\n\n\tpublic async writeCombinedViewsFile(cwd: string, options: ViewsOptions) {\n\t\tlet { vcTemplateItems, svcTemplateItems, ...rest } = options\n\n\t\tconst destinationDir = diskUtil.resolveHashSprucePath(cwd, 'views')\n\t\tconst destination = diskUtil.resolvePath(destinationDir, 'views.ts')\n\n\t\tvcTemplateItems = this.removeFileExtensionsFromTemplateItems(\n\t\t\tvcTemplateItems,\n\t\t\tdestinationDir\n\t\t)\n\n\t\tsvcTemplateItems = this.removeFileExtensionsFromTemplateItems(\n\t\t\tsvcTemplateItems,\n\t\t\tdestinationDir\n\t\t)\n\n\t\tconst contents = this.templates.views({\n\t\t\tvcTemplateItems,\n\t\t\tsvcTemplateItems,\n\t\t\t...rest,\n\t\t})\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tcontents,\n\t\t\t'Used to export your controllers to Heartwood.'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tprivate removeFileExtensionsFromTemplateItems(\n\t\tvcTemplateItems: VcTemplateItem[],\n\t\tdestinationDir: string\n\t): VcTemplateItem[] {\n\t\treturn vcTemplateItems.map((i) => ({\n\t\t\t...i,\n\t\t\tpath: diskUtil\n\t\t\t\t.resolveRelativePath(destinationDir, i.path)\n\t\t\t\t.replace('.ts', ''),\n\t\t}))\n\t}\n\n\tpublic writeViewController(\n\t\tcwd: string,\n\t\toptions: {\n\t\t\tviewType: string\n\t\t\tnamePascal: string\n\t\t\tviewModel: string\n\t\t\tnameKebab: string\n\t\t}\n\t) {\n\t\tconst { path } = this.buildViewControllerPath(\n\t\t\tcwd,\n\t\t\t'view',\n\t\t\toptions.namePascal\n\t\t)\n\n\t\treturn this.writeController(path, options)\n\t}\n\n\tprivate async writeController(path: string, options: any) {\n\t\tconst { namePascal, viewModel, viewType, nameKebab } = options\n\n\t\tif (diskUtil.doesFileExist(path)) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'SKILL_VIEW_EXISTS',\n\t\t\t\tname: namePascal,\n\t\t\t})\n\t\t}\n\n\t\tconst contents =\n\t\t\tviewType === 'skillView'\n\t\t\t\t? this.templates.skillViewController({ namePascal, nameKebab })\n\t\t\t\t: this.templates.viewController({ namePascal, viewModel, nameKebab })\n\n\t\tconst results = this.writeFileIfChangedMixinResults(path, contents, 'Test')\n\n\t\tawait this.lint(path)\n\n\t\treturn results\n\t}\n\n\tpublic doesRootControllerExist(cwd: string) {\n\t\tconst { path } = this.buildViewControllerPath(cwd, 'skillView', 'Root')\n\t\treturn diskUtil.doesFileExist(path)\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'view.plugin.ts'\n\t\t)\n\n\t\tconst pluginContents = this.templates.viewPlugin()\n\n\t\tconst results = this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tpluginContents,\n\t\t\t'Supports your skill with rendering views.'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tpublic writeTheme(cwd: string) {\n\t\tconst destination = this.buildThemePath(cwd)\n\n\t\tconst contents = this.templates.theme()\n\n\t\tconst results = this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tcontents,\n\t\t\t'Your brand new theme file!'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tprivate buildThemePath(cwd: string) {\n\t\treturn diskUtil.resolvePath(cwd, 'src', 'themes', 'skill.theme.ts')\n\t}\n\n\tpublic doesThemeFileExist(cwd: string) {\n\t\tconst destination = this.buildThemePath(cwd)\n\t\treturn diskUtil.doesFileExist(destination)\n\t}\n\n\tprivate buildViewControllerPath(\n\t\tcwd: string,\n\t\tviewType: 'skillView' | 'view',\n\t\tnamePascal: string\n\t) {\n\t\tconst ext = viewType === 'skillView' ? '.svc.ts' : '.vc.ts'\n\t\tconst filename = namePascal + ext\n\t\tconst path = diskUtil.resolvePath(\n\t\t\tcwd,\n\t\t\t'src',\n\t\t\tviewType + 'Controllers',\n\t\t\tfilename\n\t\t)\n\t\treturn { path, filename }\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AAKA;;AACA;;;;;;;;;;;;IAEqBA,U;;;;;;;;;;;;WACpB,kCACCC,GADD,EAECC,OAFD,EAME;MACD,4BAAiB,KAAKC,uBAAL,CAChBF,GADgB,EAEhB,WAFgB,EAGhBC,OAAO,CAACE,UAHQ,CAAjB;MAAA,IAAQC,IAAR,yBAAQA,IAAR;;MAMA,OAAO,KAAKC,eAAL,CAAqBD,IAArB,kCAAgCH,OAAhC;QAAyCK,QAAQ,EAAE;MAAnD,GAAP;IACA;;;;kHAED,iBAAoCN,GAApC,EAAiDC,OAAjD;QAAA;QAAA;UAAA;YAAA;cAAA;gBACOM,eADP,GACsDN,OADtD,CACOM,eADP,EACwBC,gBADxB,GACsDP,OADtD,CACwBO,gBADxB,EAC6CC,IAD7C,6CACsDR,OADtD;gBAGOS,cAHP,GAGwBC,
|
|
1
|
+
{"version":3,"file":"ViewWriter.js","names":["ViewWriter","cwd","options","buildViewControllerPath","namePascal","path","writeController","viewType","vcTemplateItems","svcTemplateItems","rest","destinationDir","diskUtil","resolveHashSprucePath","destination","resolvePath","removeFileExtensionsFromTemplateItems","contents","templates","views","writeFileIfChangedMixinResults","results","map","i","resolveRelativePath","replace","viewModel","nameKebab","doesFileExist","SpruceError","code","name","skillViewController","viewController","lint","pluginContents","viewPlugin","buildThemePath","theme","ext","filename","AbstractWriter"],"sources":["../../../../src/features/view/writers/ViewWriter.ts"],"sourcesContent":["import { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport {\n\tVcTemplateItem,\n\tViewsOptions,\n} from '../../../../../spruce-templates/build'\nimport SpruceError from '../../../errors/SpruceError'\nimport AbstractWriter from '../../../writers/AbstractWriter'\n\nexport default class ViewWriter extends AbstractWriter {\n\tpublic writeSkillViewController(\n\t\tcwd: string,\n\t\toptions: {\n\t\t\tnamePascal: string\n\t\t\tnameKebab: string\n\t\t}\n\t) {\n\t\tconst { path } = this.buildViewControllerPath(\n\t\t\tcwd,\n\t\t\t'skillView',\n\t\t\toptions.namePascal\n\t\t)\n\n\t\treturn this.writeController(path, { ...options, viewType: 'skillView' })\n\t}\n\n\tpublic async writeCombinedViewsFile(cwd: string, options: ViewsOptions) {\n\t\tlet { vcTemplateItems, svcTemplateItems, ...rest } = options\n\n\t\tconst destinationDir = diskUtil.resolveHashSprucePath(cwd, 'views')\n\t\tconst destination = diskUtil.resolvePath(destinationDir, 'views.ts')\n\n\t\tvcTemplateItems = this.removeFileExtensionsFromTemplateItems(\n\t\t\tvcTemplateItems,\n\t\t\tdestinationDir\n\t\t)\n\n\t\tsvcTemplateItems = this.removeFileExtensionsFromTemplateItems(\n\t\t\tsvcTemplateItems,\n\t\t\tdestinationDir\n\t\t)\n\n\t\tconst contents = this.templates.views({\n\t\t\tvcTemplateItems,\n\t\t\tsvcTemplateItems,\n\t\t\t...rest,\n\t\t})\n\n\t\tconst results = await this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tcontents,\n\t\t\t'Used to export your controllers to Heartwood.'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tprivate removeFileExtensionsFromTemplateItems(\n\t\tvcTemplateItems: VcTemplateItem[],\n\t\tdestinationDir: string\n\t): VcTemplateItem[] {\n\t\treturn vcTemplateItems.map((i) => ({\n\t\t\t...i,\n\t\t\tpath: diskUtil\n\t\t\t\t.resolveRelativePath(destinationDir, i.path)\n\t\t\t\t.replace('.ts', ''),\n\t\t}))\n\t}\n\n\tpublic writeViewController(\n\t\tcwd: string,\n\t\toptions: {\n\t\t\tviewType: string\n\t\t\tnamePascal: string\n\t\t\tviewModel: string\n\t\t\tnameKebab: string\n\t\t}\n\t) {\n\t\tconst { path } = this.buildViewControllerPath(\n\t\t\tcwd,\n\t\t\t'view',\n\t\t\toptions.namePascal\n\t\t)\n\n\t\treturn this.writeController(path, options)\n\t}\n\n\tprivate async writeController(path: string, options: any) {\n\t\tconst { namePascal, viewModel, viewType, nameKebab } = options\n\n\t\tif (diskUtil.doesFileExist(path)) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'SKILL_VIEW_EXISTS',\n\t\t\t\tname: namePascal,\n\t\t\t})\n\t\t}\n\n\t\tconst contents =\n\t\t\tviewType === 'skillView'\n\t\t\t\t? this.templates.skillViewController({ namePascal, nameKebab })\n\t\t\t\t: this.templates.viewController({ namePascal, viewModel, nameKebab })\n\n\t\tconst results = this.writeFileIfChangedMixinResults(path, contents, 'Test')\n\n\t\tawait this.lint(path)\n\n\t\treturn results\n\t}\n\n\tpublic doesRootControllerExist(cwd: string) {\n\t\tconst { path } = this.buildViewControllerPath(cwd, 'skillView', 'Root')\n\t\treturn diskUtil.doesFileExist(path)\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'view.plugin.ts'\n\t\t)\n\n\t\tconst pluginContents = this.templates.viewPlugin()\n\n\t\tconst results = this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tpluginContents,\n\t\t\t'Supports your skill with rendering views.'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tpublic writeTheme(cwd: string) {\n\t\tconst destination = this.buildThemePath(cwd)\n\n\t\tconst contents = this.templates.theme()\n\n\t\tconst results = this.writeFileIfChangedMixinResults(\n\t\t\tdestination,\n\t\t\tcontents,\n\t\t\t'Your brand new theme file!'\n\t\t)\n\n\t\treturn results\n\t}\n\n\tprivate buildThemePath(cwd: string) {\n\t\treturn diskUtil.resolvePath(cwd, 'src', 'themes', 'skill.theme.ts')\n\t}\n\n\tpublic doesThemeFileExist(cwd: string) {\n\t\tconst destination = this.buildThemePath(cwd)\n\t\treturn diskUtil.doesFileExist(destination)\n\t}\n\n\tprivate buildViewControllerPath(\n\t\tcwd: string,\n\t\tviewType: 'skillView' | 'view',\n\t\tnamePascal: string\n\t) {\n\t\tconst ext = viewType === 'skillView' ? '.svc.ts' : '.vc.ts'\n\t\tconst filename = namePascal + ext\n\t\tconst path = diskUtil.resolvePath(\n\t\t\tcwd,\n\t\t\t'src',\n\t\t\tviewType + 'Controllers',\n\t\t\tfilename\n\t\t)\n\t\treturn { path, filename }\n\t}\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VsCodeFeature.js","names":["VsCodeFeature","diskUtil","resolvePath","__dirname","path","description","shouldOverwriteWhenChanged","confirmPromptOnFirstWrite","command","Service","execute","AbstractFeature"],"sources":["../../../src/features/vscode/VsCodeFeature.ts"],"sourcesContent":["/* eslint-disable no-unreachable */\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { FileDescription } from '../../types/cli.types'\nimport AbstractFeature from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tvscode: VsCodeFeature\n\t}\n}\n\nexport default class VsCodeFeature extends AbstractFeature {\n\tpublic nameReadable = 'VSCode'\n\tpublic description = 'Create settings and install VSCode extensions'\n\tpublic code: FeatureCode = 'vscode'\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic readonly fileDescriptions: FileDescription[] = [\n\t\t{\n\t\t\tpath: '.vscode/launch.json',\n\t\t\tdescription: 'Sets you up for debugging in Visual Studio Code.',\n\t\t\tshouldOverwriteWhenChanged: true,\n\t\t\tconfirmPromptOnFirstWrite: 'Want me to setup debugging for you?',\n\t\t},\n\t\t{\n\t\t\tpath: '.vscode/settings.json',\n\t\t\tdescription: 'Ties everything together for optimal team productivity.',\n\t\t\tshouldOverwriteWhenChanged: true,\n\t\t\tconfirmPromptOnFirstWrite:\n\t\t\t\t'Want me to setup vscode settings for building, testing and linting on save?',\n\t\t},\n\t\t{\n\t\t\tpath: '.vscode/tasks.json',\n\t\t\tdescription:\n\t\t\t\t'command+shift+t to open the Test Reporter, build watch on load, etc.',\n\t\t\tshouldOverwriteWhenChanged: true,\n\t\t\tconfirmPromptOnFirstWrite:\n\t\t\t\t'Want me to start watchers when you start vscode?',\n\t\t},\n\t]\n\n\tpublic isInstalled = async () => {\n\t\tconst command = this.Service('command')\n\n\t\ttry {\n\t\t\tawait command.execute('which code')\n\t\t} catch (err) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn true\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AAEA;;;;;;IASqBA,a;;;;;;;;;;;;;;;qGACE,Q;oGACD,+C;6FACM,Q;mGACPC,
|
|
1
|
+
{"version":3,"file":"VsCodeFeature.js","names":["VsCodeFeature","diskUtil","resolvePath","__dirname","path","description","shouldOverwriteWhenChanged","confirmPromptOnFirstWrite","command","Service","execute","AbstractFeature"],"sources":["../../../src/features/vscode/VsCodeFeature.ts"],"sourcesContent":["/* eslint-disable no-unreachable */\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport { FileDescription } from '../../types/cli.types'\nimport AbstractFeature from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\tvscode: VsCodeFeature\n\t}\n}\n\nexport default class VsCodeFeature extends AbstractFeature {\n\tpublic nameReadable = 'VSCode'\n\tpublic description = 'Create settings and install VSCode extensions'\n\tpublic code: FeatureCode = 'vscode'\n\tpublic actionsDir = diskUtil.resolvePath(__dirname, 'actions')\n\n\tpublic readonly fileDescriptions: FileDescription[] = [\n\t\t{\n\t\t\tpath: '.vscode/launch.json',\n\t\t\tdescription: 'Sets you up for debugging in Visual Studio Code.',\n\t\t\tshouldOverwriteWhenChanged: true,\n\t\t\tconfirmPromptOnFirstWrite: 'Want me to setup debugging for you?',\n\t\t},\n\t\t{\n\t\t\tpath: '.vscode/settings.json',\n\t\t\tdescription: 'Ties everything together for optimal team productivity.',\n\t\t\tshouldOverwriteWhenChanged: true,\n\t\t\tconfirmPromptOnFirstWrite:\n\t\t\t\t'Want me to setup vscode settings for building, testing and linting on save?',\n\t\t},\n\t\t{\n\t\t\tpath: '.vscode/tasks.json',\n\t\t\tdescription:\n\t\t\t\t'command+shift+t to open the Test Reporter, build watch on load, etc.',\n\t\t\tshouldOverwriteWhenChanged: true,\n\t\t\tconfirmPromptOnFirstWrite:\n\t\t\t\t'Want me to start watchers when you start vscode?',\n\t\t},\n\t]\n\n\tpublic isInstalled = async () => {\n\t\tconst command = this.Service('command')\n\n\t\ttry {\n\t\t\tawait command.execute('which code')\n\t\t} catch (err) {\n\t\t\treturn false\n\t\t}\n\n\t\treturn true\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AAEA;;;;;;IASqBA,a;;;;;;;;;;;;;;;qGACE,Q;oGACD,+C;6FACM,Q;mGACPC,0BAAA,CAASC,WAAT,CAAqBC,SAArB,EAAgC,SAAhC,C;yGAEkC,CACrD;MACCC,IAAI,EAAE,qBADP;MAECC,WAAW,EAAE,kDAFd;MAGCC,0BAA0B,EAAE,IAH7B;MAICC,yBAAyB,EAAE;IAJ5B,CADqD,EAOrD;MACCH,IAAI,EAAE,uBADP;MAECC,WAAW,EAAE,yDAFd;MAGCC,0BAA0B,EAAE,IAH7B;MAICC,yBAAyB,EACxB;IALF,CAPqD,EAcrD;MACCH,IAAI,EAAE,oBADP;MAECC,WAAW,EACV,sEAHF;MAICC,0BAA0B,EAAE,IAJ7B;MAKCC,yBAAyB,EACxB;IANF,CAdqD,C;+LAwBjC;MAAA;MAAA;QAAA;UAAA;YAAA;cACdC,OADc,GACJ,MAAKC,OAAL,CAAa,SAAb,CADI;cAAA;cAAA;cAAA,OAIbD,OAAO,CAACE,OAAR,CAAgB,YAAhB,CAJa;;YAAA;cAAA;cAAA;;YAAA;cAAA;cAAA;cAAA,iCAMZ,KANY;;YAAA;cAAA,iCASb,IATa;;YAAA;YAAA;cAAA;UAAA;QAAA;MAAA;IAAA,C;;;;;EA9BqBC,4B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VsCodeService.js","names":["VSCODE_MINIMUM_VERSION","VsCodeService","isInstalled","execute","args","stdout","lines","split","semver","satisfies","extensions","extensionIds","forEach","eId","concat","CommandService"],"sources":["../../../../src/features/vscode/services/VsCodeService.ts"],"sourcesContent":["import semver from 'semver'\nimport CommandService from '../../../services/CommandService'\n\nconst VSCODE_MINIMUM_VERSION = '1.44.0'\n\nexport interface Extension {\n\t/** The vscode extension id like dbaeumer.vscode-eslint */\n\tid: string\n\t/** A friendly name / description that will describe what the extension is or does */\n\tlabel: string\n}\n\nexport default class VsCodeService extends CommandService {\n\t/** Returns whether or not vscode is installed */\n\tpublic async isInstalled(): Promise<boolean> {\n\t\tconst isInstalled = false\n\t\ttry {\n\t\t\tconst { stdout } = await this.execute('code', {\n\t\t\t\targs: ['--version'],\n\t\t\t})\n\n\t\t\tconst lines = stdout.split('\\n')\n\t\t\tif (\n\t\t\t\tlines &&\n\t\t\t\tlines[0] &&\n\t\t\t\tsemver.satisfies(lines[0], `>=${VSCODE_MINIMUM_VERSION}`)\n\t\t\t) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-empty\n\t\t} catch (e) {}\n\n\t\treturn isInstalled\n\t}\n\n\tpublic async getVSCodeExtensions(): Promise<string[]> {\n\t\tlet extensions: string[] = []\n\n\t\ttry {\n\t\t\tconst { stdout } = await this.execute('code', {\n\t\t\t\targs: ['--list-extensions'],\n\t\t\t})\n\n\t\t\textensions = stdout.split('\\n')\n\t\t\t// eslint-disable-next-line no-empty\n\t\t} catch (e) {}\n\n\t\treturn extensions\n\t}\n\n\tpublic async installExtensions(extensionIds: string[]) {\n\t\tlet args: string[] = []\n\t\textensionIds.forEach((eId) => {\n\t\t\targs = args.concat('--install-extension', eId)\n\t\t})\n\n\t\tawait this.execute('code', {\n\t\t\targs,\n\t\t})\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;AAEA,IAAMA,sBAAsB,GAAG,QAA/B;;IASqBC,a;;;;;;;;;;;;;IACpB;;uGACA;QAAA;;QAAA;UAAA;YAAA;cAAA;gBACOC,WADP,GACqB,KADrB;gBAAA;gBAAA;gBAAA,OAG2B,KAAKC,OAAL,CAAa,MAAb,EAAqB;kBAC7CC,IAAI,EAAE,CAAC,WAAD;gBADuC,CAArB,CAH3B;;cAAA;gBAAA;gBAGUC,MAHV,uBAGUA,MAHV;gBAOQC,KAPR,GAOgBD,MAAM,CAACE,KAAP,CAAa,IAAb,CAPhB;;gBAAA,MASGD,KAAK,IACLA,KAAK,CAAC,CAAD,CADL,IAEAE,
|
|
1
|
+
{"version":3,"file":"VsCodeService.js","names":["VSCODE_MINIMUM_VERSION","VsCodeService","isInstalled","execute","args","stdout","lines","split","semver","satisfies","extensions","extensionIds","forEach","eId","concat","CommandService"],"sources":["../../../../src/features/vscode/services/VsCodeService.ts"],"sourcesContent":["import semver from 'semver'\nimport CommandService from '../../../services/CommandService'\n\nconst VSCODE_MINIMUM_VERSION = '1.44.0'\n\nexport interface Extension {\n\t/** The vscode extension id like dbaeumer.vscode-eslint */\n\tid: string\n\t/** A friendly name / description that will describe what the extension is or does */\n\tlabel: string\n}\n\nexport default class VsCodeService extends CommandService {\n\t/** Returns whether or not vscode is installed */\n\tpublic async isInstalled(): Promise<boolean> {\n\t\tconst isInstalled = false\n\t\ttry {\n\t\t\tconst { stdout } = await this.execute('code', {\n\t\t\t\targs: ['--version'],\n\t\t\t})\n\n\t\t\tconst lines = stdout.split('\\n')\n\t\t\tif (\n\t\t\t\tlines &&\n\t\t\t\tlines[0] &&\n\t\t\t\tsemver.satisfies(lines[0], `>=${VSCODE_MINIMUM_VERSION}`)\n\t\t\t) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\t// eslint-disable-next-line no-empty\n\t\t} catch (e) {}\n\n\t\treturn isInstalled\n\t}\n\n\tpublic async getVSCodeExtensions(): Promise<string[]> {\n\t\tlet extensions: string[] = []\n\n\t\ttry {\n\t\t\tconst { stdout } = await this.execute('code', {\n\t\t\t\targs: ['--list-extensions'],\n\t\t\t})\n\n\t\t\textensions = stdout.split('\\n')\n\t\t\t// eslint-disable-next-line no-empty\n\t\t} catch (e) {}\n\n\t\treturn extensions\n\t}\n\n\tpublic async installExtensions(extensionIds: string[]) {\n\t\tlet args: string[] = []\n\t\textensionIds.forEach((eId) => {\n\t\t\targs = args.concat('--install-extension', eId)\n\t\t})\n\n\t\tawait this.execute('code', {\n\t\t\targs,\n\t\t})\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;AAEA,IAAMA,sBAAsB,GAAG,QAA/B;;IASqBC,a;;;;;;;;;;;;;IACpB;;uGACA;QAAA;;QAAA;UAAA;YAAA;cAAA;gBACOC,WADP,GACqB,KADrB;gBAAA;gBAAA;gBAAA,OAG2B,KAAKC,OAAL,CAAa,MAAb,EAAqB;kBAC7CC,IAAI,EAAE,CAAC,WAAD;gBADuC,CAArB,CAH3B;;cAAA;gBAAA;gBAGUC,MAHV,uBAGUA,MAHV;gBAOQC,KAPR,GAOgBD,MAAM,CAACE,KAAP,CAAa,IAAb,CAPhB;;gBAAA,MASGD,KAAK,IACLA,KAAK,CAAC,CAAD,CADL,IAEAE,kBAAA,CAAOC,SAAP,CAAiBH,KAAK,CAAC,CAAD,CAAtB,cAAgCN,sBAAhC,EAXH;kBAAA;kBAAA;gBAAA;;gBAAA,iCAaU,IAbV;;cAAA;gBAAA;gBAAA;;cAAA;gBAAA;gBAAA;;cAAA;gBAAA,iCAkBQE,WAlBR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;;+GAqBA;QAAA;;QAAA;UAAA;YAAA;cAAA;gBACKQ,UADL,GAC4B,EAD5B;gBAAA;gBAAA;gBAAA,OAI2B,KAAKP,OAAL,CAAa,MAAb,EAAqB;kBAC7CC,IAAI,EAAE,CAAC,mBAAD;gBADuC,CAArB,CAJ3B;;cAAA;gBAAA;gBAIUC,MAJV,wBAIUA,MAJV;gBAQEK,UAAU,GAAGL,MAAM,CAACE,KAAP,CAAa,IAAb,CAAb,CARF,CASE;;gBATF;gBAAA;;cAAA;gBAAA;gBAAA;;cAAA;gBAAA,kCAYQG,UAZR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;;6GAeA,kBAA+BC,YAA/B;QAAA;QAAA;UAAA;YAAA;cAAA;gBACKP,IADL,GACsB,EADtB;gBAECO,YAAY,CAACC,OAAb,CAAqB,UAACC,GAAD,EAAS;kBAC7BT,IAAI,GAAGA,IAAI,CAACU,MAAL,CAAY,qBAAZ,EAAmCD,GAAnC,CAAP;gBACA,CAFD;gBAFD;gBAAA,OAMO,KAAKV,OAAL,CAAa,MAAb,EAAqB;kBAC1BC,IAAI,EAAJA;gBAD0B,CAArB,CANP;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;EAtC0CW,2B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VsCodeWriter.js","names":["VsCodeWriter","destinationDir","shouldConfirmBeforeWriting","writeDirectoryTemplate","code","DirectoryTemplateCode","VsCode","context","AbstractWriter"],"sources":["../../../../src/features/vscode/writers/VsCodeWriter.ts"],"sourcesContent":["import { DirectoryTemplateCode } from '@sprucelabs/spruce-templates'\nimport AbstractWriter, { WriteResults } from '../../../writers/AbstractWriter'\n\nexport default class VsCodeWriter extends AbstractWriter {\n\tpublic async writeVsCodeConfigurations(\n\t\tdestinationDir: string,\n\t\tshouldConfirmBeforeWriting = true\n\t): Promise<WriteResults> {\n\t\treturn this.writeDirectoryTemplate({\n\t\t\tdestinationDir,\n\t\t\tcode: DirectoryTemplateCode.VsCode,\n\t\t\tshouldConfirmBeforeWriting,\n\t\t\tcontext: {},\n\t\t})\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;IAEqBA,Y;;;;;;;;;;;;;qHACpB,iBACCC,cADD;QAAA;QAAA;QAAA;UAAA;YAAA;cAAA;gBAECC,0BAFD,2DAE8B,IAF9B;gBAAA,iCAIQ,KAAKC,sBAAL,CAA4B;kBAClCF,cAAc,EAAdA,cADkC;kBAElCG,IAAI,EAAEC,
|
|
1
|
+
{"version":3,"file":"VsCodeWriter.js","names":["VsCodeWriter","destinationDir","shouldConfirmBeforeWriting","writeDirectoryTemplate","code","DirectoryTemplateCode","VsCode","context","AbstractWriter"],"sources":["../../../../src/features/vscode/writers/VsCodeWriter.ts"],"sourcesContent":["import { DirectoryTemplateCode } from '@sprucelabs/spruce-templates'\nimport AbstractWriter, { WriteResults } from '../../../writers/AbstractWriter'\n\nexport default class VsCodeWriter extends AbstractWriter {\n\tpublic async writeVsCodeConfigurations(\n\t\tdestinationDir: string,\n\t\tshouldConfirmBeforeWriting = true\n\t): Promise<WriteResults> {\n\t\treturn this.writeDirectoryTemplate({\n\t\t\tdestinationDir,\n\t\t\tcode: DirectoryTemplateCode.VsCode,\n\t\t\tshouldConfirmBeforeWriting,\n\t\t\tcontext: {},\n\t\t})\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;;;;;IAEqBA,Y;;;;;;;;;;;;;qHACpB,iBACCC,cADD;QAAA;QAAA;QAAA;UAAA;YAAA;cAAA;gBAECC,0BAFD,2DAE8B,IAF9B;gBAAA,iCAIQ,KAAKC,sBAAL,CAA4B;kBAClCF,cAAc,EAAdA,cADkC;kBAElCG,IAAI,EAAEC,sCAAA,CAAsBC,MAFM;kBAGlCJ,0BAA0B,EAA1BA,0BAHkC;kBAIlCK,OAAO,EAAE;gBAJyB,CAA5B,CAJR;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;EADyCC,2B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WatchFeature.js","names":["WatchFeature","_isWatching","options","watchDir","diskUtil","resolvePath","cwd","sourceDir","watcher","chokidar","watch","ignoreInitial","startsWith","on","action","path","changesSinceLastChange","push","schemaId","mapChokidarActionToSchemaId","version","values","mapChokidarActionToGeneratedAction","name","pathUtil","basename","timeoutId","clearTimeout","setTimeout","fireChange","delay","search","map","add","addDir","change","unlink","unlinkDir","changes","emitter","emit","close","AbstractFeature"],"sources":["../../../src/features/watch/WatchFeature.ts"],"sourcesContent":["import pathUtil from 'path'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport chokidar from 'chokidar'\nimport { GeneratedFile, GeneratedFileOrDir } from '../../types/cli.types'\nimport AbstractFeature from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ntype ChokidarAction = 'add' | 'addDir' | 'change' | 'unlink' | 'unlinkDir'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\twatch: WatchFeature\n\t}\n\n\tinterface FeatureOptionsMap {\n\t\twatch: undefined\n\t}\n}\n\nexport default class WatchFeature extends AbstractFeature {\n\tpublic description =\n\t\t'Watches for changes on the file system and emits app level events for other features to respond to.'\n\tpublic code: FeatureCode = 'watch'\n\tpublic nameReadable = 'Watch'\n\n\tprivate _isWatching = false\n\tprivate watcher?: chokidar.FSWatcher\n\t// eslint-disable-next-line no-undef\n\tprivate timeoutId?: NodeJS.Timeout\n\tprivate changesSinceLastChange: GeneratedFileOrDir[] = []\n\n\tpublic async isWatching() {\n\t\treturn this._isWatching\n\t}\n\n\tpublic async startWatching(options?: { delay?: number; sourceDir?: string }) {\n\t\tthis._isWatching = true\n\n\t\tconst watchDir = diskUtil.resolvePath(this.cwd, options?.sourceDir ?? '')\n\n\t\tthis.watcher = chokidar.watch(watchDir, {\n\t\t\tignoreInitial: true,\n\t\t})\n\n\t\tconst startsWith = diskUtil.resolvePath(watchDir, 'build')\n\n\t\tthis.watcher.on('all', async (action, path) => {\n\t\t\tif (path.startsWith(startsWith)) {\n\t\t\t\tthis.changesSinceLastChange.push({\n\t\t\t\t\tschemaId: this.mapChokidarActionToSchemaId(action),\n\t\t\t\t\tversion: 'v2020_07_22',\n\t\t\t\t\tvalues: {\n\t\t\t\t\t\taction: this.mapChokidarActionToGeneratedAction(action),\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\tname: pathUtil.basename(path),\n\t\t\t\t\t},\n\t\t\t\t})\n\n\t\t\t\tif (this.timeoutId) {\n\t\t\t\t\tclearTimeout(this.timeoutId)\n\t\t\t\t}\n\n\t\t\t\tthis.timeoutId = setTimeout(async () => {\n\t\t\t\t\tawait this.fireChange()\n\t\t\t\t}, options?.delay ?? 500)\n\t\t\t}\n\t\t})\n\t}\n\n\tprivate mapChokidarActionToSchemaId(\n\t\taction: ChokidarAction\n\t): GeneratedFileOrDir['schemaId'] {\n\t\treturn action.search(/dir/gi) > -1 ? 'generatedDir' : 'generatedFile'\n\t}\n\n\tprivate mapChokidarActionToGeneratedAction(chokidar: ChokidarAction) {\n\t\tconst map = {\n\t\t\tadd: 'generated',\n\t\t\taddDir: 'generated',\n\t\t\tchange: 'updated',\n\t\t\tunlink: 'deleted',\n\t\t\tunlinkDir: 'deleted',\n\t\t}\n\n\t\treturn map[chokidar] as GeneratedFile['action']\n\t}\n\n\tprivate async fireChange() {\n\t\tconst changes = this.changesSinceLastChange\n\t\tthis.changesSinceLastChange = []\n\n\t\tawait this.emitter.emit('watcher.did-detect-change', {\n\t\t\tchanges,\n\t\t})\n\t}\n\n\tpublic async stopWatching() {\n\t\tthis._isWatching = false\n\t\tawait this.watcher?.close()\n\t}\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;AACA;;AACA;;AAEA;;;;;;IAeqBA,Y;;;;;;;;;;;;;;;oGAEnB,qG;6FAC0B,O;qGACL,O;oGAEA,K;;;+GAIiC,E;;;;;;;sGAEvD;QAAA;UAAA;YAAA;cAAA;gBAAA,iCACQ,KAAKC,WADb;;cAAA;cAAA;gBAAA;YAAA;UAAA;QAAA;MAAA,C;;;;;;;;;;;yGAIA,kBAA2BC,OAA3B;QAAA;QAAA;;QAAA;QAAA;UAAA;YAAA;cAAA;gBACC,KAAKD,WAAL,GAAmB,IAAnB;gBAEME,QAHP,GAGkBC,
|
|
1
|
+
{"version":3,"file":"WatchFeature.js","names":["WatchFeature","_isWatching","options","watchDir","diskUtil","resolvePath","cwd","sourceDir","watcher","chokidar","watch","ignoreInitial","startsWith","on","action","path","changesSinceLastChange","push","schemaId","mapChokidarActionToSchemaId","version","values","mapChokidarActionToGeneratedAction","name","pathUtil","basename","timeoutId","clearTimeout","setTimeout","fireChange","delay","search","map","add","addDir","change","unlink","unlinkDir","changes","emitter","emit","close","AbstractFeature"],"sources":["../../../src/features/watch/WatchFeature.ts"],"sourcesContent":["import pathUtil from 'path'\nimport { diskUtil } from '@sprucelabs/spruce-skill-utils'\nimport chokidar from 'chokidar'\nimport { GeneratedFile, GeneratedFileOrDir } from '../../types/cli.types'\nimport AbstractFeature from '../AbstractFeature'\nimport { FeatureCode } from '../features.types'\n\ntype ChokidarAction = 'add' | 'addDir' | 'change' | 'unlink' | 'unlinkDir'\n\ndeclare module '../../features/features.types' {\n\tinterface FeatureMap {\n\t\twatch: WatchFeature\n\t}\n\n\tinterface FeatureOptionsMap {\n\t\twatch: undefined\n\t}\n}\n\nexport default class WatchFeature extends AbstractFeature {\n\tpublic description =\n\t\t'Watches for changes on the file system and emits app level events for other features to respond to.'\n\tpublic code: FeatureCode = 'watch'\n\tpublic nameReadable = 'Watch'\n\n\tprivate _isWatching = false\n\tprivate watcher?: chokidar.FSWatcher\n\t// eslint-disable-next-line no-undef\n\tprivate timeoutId?: NodeJS.Timeout\n\tprivate changesSinceLastChange: GeneratedFileOrDir[] = []\n\n\tpublic async isWatching() {\n\t\treturn this._isWatching\n\t}\n\n\tpublic async startWatching(options?: { delay?: number; sourceDir?: string }) {\n\t\tthis._isWatching = true\n\n\t\tconst watchDir = diskUtil.resolvePath(this.cwd, options?.sourceDir ?? '')\n\n\t\tthis.watcher = chokidar.watch(watchDir, {\n\t\t\tignoreInitial: true,\n\t\t})\n\n\t\tconst startsWith = diskUtil.resolvePath(watchDir, 'build')\n\n\t\tthis.watcher.on('all', async (action, path) => {\n\t\t\tif (path.startsWith(startsWith)) {\n\t\t\t\tthis.changesSinceLastChange.push({\n\t\t\t\t\tschemaId: this.mapChokidarActionToSchemaId(action),\n\t\t\t\t\tversion: 'v2020_07_22',\n\t\t\t\t\tvalues: {\n\t\t\t\t\t\taction: this.mapChokidarActionToGeneratedAction(action),\n\t\t\t\t\t\tpath,\n\t\t\t\t\t\tname: pathUtil.basename(path),\n\t\t\t\t\t},\n\t\t\t\t})\n\n\t\t\t\tif (this.timeoutId) {\n\t\t\t\t\tclearTimeout(this.timeoutId)\n\t\t\t\t}\n\n\t\t\t\tthis.timeoutId = setTimeout(async () => {\n\t\t\t\t\tawait this.fireChange()\n\t\t\t\t}, options?.delay ?? 500)\n\t\t\t}\n\t\t})\n\t}\n\n\tprivate mapChokidarActionToSchemaId(\n\t\taction: ChokidarAction\n\t): GeneratedFileOrDir['schemaId'] {\n\t\treturn action.search(/dir/gi) > -1 ? 'generatedDir' : 'generatedFile'\n\t}\n\n\tprivate mapChokidarActionToGeneratedAction(chokidar: ChokidarAction) {\n\t\tconst map = {\n\t\t\tadd: 'generated',\n\t\t\taddDir: 'generated',\n\t\t\tchange: 'updated',\n\t\t\tunlink: 'deleted',\n\t\t\tunlinkDir: 'deleted',\n\t\t}\n\n\t\treturn map[chokidar] as GeneratedFile['action']\n\t}\n\n\tprivate async fireChange() {\n\t\tconst changes = this.changesSinceLastChange\n\t\tthis.changesSinceLastChange = []\n\n\t\tawait this.emitter.emit('watcher.did-detect-change', {\n\t\t\tchanges,\n\t\t})\n\t}\n\n\tpublic async stopWatching() {\n\t\tthis._isWatching = false\n\t\tawait this.watcher?.close()\n\t}\n}\n"],"mappings":"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"}
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["require","config","process","argv","then","results","code","errors","length","exit","err","term","TerminalInterface","cwd","env","CLI_RENDER_STACK_TRACES","renderError"],"sources":["../src/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { run } from './cli'\nimport TerminalInterface from './interfaces/TerminalInterface'\n\nrequire('dotenv').config()\n\nrun(process.argv)\n\t.then((results: any) => {\n\t\tconst code = results?.errors?.length > 0 ? 1 : 0\n\t\tprocess.exit(code)\n\t})\n\t.catch((err) => {\n\t\tconst term = new TerminalInterface(\n\t\t\tprocess.cwd(),\n\t\t\tprocess.env.CLI_RENDER_STACK_TRACES !== 'false'\n\t\t)\n\t\tterm.renderError(err)\n\t\tprocess.exit(1)\n\t})\n"],"mappings":"AAAA;;;;;AAEA;;AACA;;AAEAA,OAAO,CAAC,QAAD,CAAP,CAAkBC,MAAlB;;AAEA,
|
|
1
|
+
{"version":3,"file":"index.js","names":["require","config","run","process","argv","then","results","code","errors","length","exit","err","term","TerminalInterface","cwd","env","CLI_RENDER_STACK_TRACES","renderError"],"sources":["../src/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { run } from './cli'\nimport TerminalInterface from './interfaces/TerminalInterface'\n\nrequire('dotenv').config()\n\nrun(process.argv)\n\t.then((results: any) => {\n\t\tconst code = results?.errors?.length > 0 ? 1 : 0\n\t\tprocess.exit(code)\n\t})\n\t.catch((err) => {\n\t\tconst term = new TerminalInterface(\n\t\t\tprocess.cwd(),\n\t\t\tprocess.env.CLI_RENDER_STACK_TRACES !== 'false'\n\t\t)\n\t\tterm.renderError(err)\n\t\tprocess.exit(1)\n\t})\n"],"mappings":"AAAA;;;;;AAEA;;AACA;;AAEAA,OAAO,CAAC,QAAD,CAAP,CAAkBC,MAAlB;;AAEA,IAAAC,QAAA,EAAIC,OAAO,CAACC,IAAZ,EACEC,IADF,CACO,UAACC,OAAD,EAAkB;EAAA;;EACvB,IAAMC,IAAI,GAAG,CAAAD,OAAO,SAAP,IAAAA,OAAO,WAAP,+BAAAA,OAAO,CAAEE,MAAT,oEAAiBC,MAAjB,IAA0B,CAA1B,GAA8B,CAA9B,GAAkC,CAA/C;EACAN,OAAO,CAACO,IAAR,CAAaH,IAAb;AACA,CAJF,WAKQ,UAACI,GAAD,EAAS;EACf,IAAMC,IAAI,GAAG,IAAIC,6BAAJ,CACZV,OAAO,CAACW,GAAR,EADY,EAEZX,OAAO,CAACY,GAAR,CAAYC,uBAAZ,KAAwC,OAF5B,CAAb;EAIAJ,IAAI,CAACK,WAAL,CAAiBN,GAAjB;EACAR,OAAO,CAACO,IAAR,CAAa,CAAb;AACA,CAZF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SpyInterface.js","names":["SpyInterface","x","y","startTime","Date","getTime","term","shouldRenderTestLogs","TerminalInterface","process","cwd","strs","optionallyRenderLine","join","undefined","env","SHOULD_RENDER_TEST_LOGS","message","effects","trackInvocation","renderWarning","renderHint","command","options","invocations","push","promptResolver","confirmResolver","waitForEnterResolver","clearTimeout","promptTimeout","length","input","resolver","promptDefaultValue","toLowerCase","Error","Promise","resolve","setTimeout","renderSection","obj","renderObject","err","renderError","code","renderCodeSample","results","renderActionSummary","renderHero","dividerEffects","renderHeadline","renderDivider","duration","friendly","durationUtil","msToFriendly","testLog","info","global","activeTest","test","path","messages","renderLines","definition","msg","namesUtil","toPascal","type","label","choices","forEach","choice","value","reject","reset","assert","fail","defaultValue","ttl","checkInterval","loops","lastWriteCount","isWaitingForInput","hasWritten","testUtil","log","question","title","cursorPosition","pos"],"sources":["../../src/interfaces/SpyInterface.ts"],"sourcesContent":["import { FieldDefinitionValueType } from '@sprucelabs/schema'\nimport { namesUtil, testLog } from '@sprucelabs/spruce-skill-utils'\nimport { assert } from '@sprucelabs/test'\nimport { FieldDefinitions } from '#spruce/schemas/fields/fields.types'\nimport testUtil from '../tests/utilities/test.utility'\nimport { ExecutionResults } from '../types/cli.types'\nimport { GraphicsInterface } from '../types/cli.types'\nimport {\n\tGraphicsTextEffect,\n\tProgressBarOptions,\n\tProgressBarUpdateOptions,\n\tImageDimensions,\n} from '../types/graphicsInterface.types'\nimport durationUtil from '../utilities/duration.utility'\nimport TerminalInterface from './TerminalInterface'\n\nexport default class SpyInterface implements GraphicsInterface {\n\tpublic invocations: { command: string; options?: any }[] = []\n\tprivate cursorPosition = { x: 0, y: 0 }\n\n\tprivate promptResolver?: (\n\t\tinput: FieldDefinitionValueType<FieldDefinitions>\n\t) => void | undefined\n\n\tprivate confirmResolver?: (pass: boolean) => void | undefined\n\tprivate waitForEnterResolver?: () => void | undefined\n\tprivate promptDefaultValue: any\n\tprivate term?: TerminalInterface\n\tprivate startTime: number\n\tprivate promptTimeout?: any\n\n\tpublic constructor() {\n\t\tthis.startTime = new Date().getTime()\n\n\t\tthis.term = this.shouldRenderTestLogs()\n\t\t\t? new TerminalInterface(process.cwd(), true, (...strs: []) => {\n\t\t\t\t\tthis.optionallyRenderLine(strs.join(' '))\n\t\t\t })\n\t\t\t: undefined\n\t}\n\n\tprivate shouldRenderTestLogs() {\n\t\treturn process.env.SHOULD_RENDER_TEST_LOGS === 'true'\n\t}\n\n\tpublic renderWarning(\n\t\tmessage: string,\n\t\teffects?: GraphicsTextEffect[] | undefined\n\t): void {\n\t\tthis.trackInvocation('renderWarning', { message, effects })\n\t\tthis.term?.renderWarning(message)\n\t}\n\n\tpublic renderHint(\n\t\tmessage: string,\n\t\teffects?: GraphicsTextEffect[] | undefined\n\t): void {\n\t\tthis.trackInvocation('renderHint', { message, effects })\n\t\tthis.optionallyRenderLine(`Hint: ${message}`)\n\t\tthis.term?.renderHint(message)\n\t}\n\n\tprivate trackInvocation(command: string, options?: any) {\n\t\t// testUtil.log(command, JSON.stringify(options), '\\n')\n\t\tthis.invocations.push({ command, options })\n\t}\n\n\tpublic isWaitingForInput() {\n\t\treturn !!(\n\t\t\tthis.promptResolver ||\n\t\t\tthis.confirmResolver ||\n\t\t\tthis.waitForEnterResolver\n\t\t)\n\t}\n\n\tpublic reset() {\n\t\tthis.promptResolver = undefined\n\t\tthis.confirmResolver = undefined\n\t\tthis.waitForEnterResolver = undefined\n\t\tclearTimeout(this.promptTimeout)\n\t}\n\n\tpublic getLastInvocation() {\n\t\treturn this.invocations[this.invocations.length - 1]\n\t}\n\n\tpublic async sendInput(input: string | string[]): Promise<void> {\n\t\tthis.trackInvocation('sendInput', input)\n\n\t\tthis.optionallyRenderLine(\n\t\t\t`Sending input: \"${input.length > 0 ? input : 'ENTER'}\"`\n\t\t)\n\n\t\tif (this.waitForEnterResolver) {\n\t\t\tconst resolver = this.waitForEnterResolver\n\t\t\tthis.waitForEnterResolver = undefined\n\n\t\t\tresolver()\n\t\t} else if (this.promptResolver) {\n\t\t\tconst resolver = this.promptResolver\n\t\t\tthis.promptResolver = undefined\n\n\t\t\tresolver(input !== '\\n' && input !== '' ? input : this.promptDefaultValue)\n\t\t} else if (this.confirmResolver) {\n\t\t\tconst resolver = this.confirmResolver\n\t\t\tthis.confirmResolver = undefined\n\n\t\t\tresolver(\n\t\t\t\tinput === '\\n' ||\n\t\t\t\t\tinput.length === 0 ||\n\t\t\t\t\t(typeof input === 'string' && input.toLowerCase() === 'y')\n\t\t\t)\n\t\t} else {\n\t\t\tthrow new Error('Sent input before prompted for input')\n\t\t}\n\n\t\treturn new Promise((resolve) => {\n\t\t\tsetTimeout(resolve, 50)\n\t\t})\n\t}\n\n\tpublic renderSection(options: {\n\t\theadline: string\n\t\tlines?: string[] | string[]\n\t\theadlineEffects?: GraphicsTextEffect[]\n\t\tdividerEffects?: GraphicsTextEffect[]\n\t\tbodyEffects?: GraphicsTextEffect[]\n\t\tobject?: any\n\t}): void {\n\t\tthis.trackInvocation('renderSection', options)\n\t\tthis.term?.renderSection(options)\n\t}\n\n\tpublic renderObject(obj: any): void {\n\t\tthis.trackInvocation('renderObject', obj)\n\t\tthis.term?.renderObject(obj)\n\t}\n\n\tpublic renderError(err: Error): void {\n\t\tthis.trackInvocation('renderError', err)\n\t\tthis.term?.renderError(err)\n\t}\n\n\tpublic renderCodeSample(code: string): void {\n\t\tthis.trackInvocation('renderCodeSample', code)\n\t\tthis.term?.renderCodeSample(code)\n\t}\n\n\tpublic renderActionSummary(results: ExecutionResults): void {\n\t\tthis.trackInvocation('renderCommandSummary', results)\n\t\tthis.term?.renderActionSummary(results)\n\t}\n\n\tpublic renderHero(\n\t\tmessage: string,\n\t\teffects?: GraphicsTextEffect[] | undefined\n\t): void {\n\t\tthis.trackInvocation('renderHero', { message, effects })\n\t\tthis.term?.renderHero(message, effects)\n\t}\n\n\tpublic renderHeadline(\n\t\tmessage: string,\n\t\teffects: GraphicsTextEffect[],\n\t\tdividerEffects: GraphicsTextEffect[]\n\t): void {\n\t\tthis.trackInvocation('renderHeadline', { message, effects, dividerEffects })\n\t\tthis.term?.renderHeadline(message, effects, dividerEffects)\n\t}\n\n\tpublic renderDivider(effects?: GraphicsTextEffect[] | undefined): void {\n\t\tthis.trackInvocation('renderDivider', effects)\n\t\tthis.term?.renderDivider(effects)\n\t}\n\n\tpublic renderLine(\n\t\tmessage: string,\n\t\teffects?: GraphicsTextEffect[] | undefined\n\t): void {\n\t\tthis.trackInvocation('renderLine', { message, effects })\n\t\tmessage && message.length > 0 && this.optionallyRenderLine(message)\n\t}\n\n\tprivate optionallyRenderLine(message: string) {\n\t\tif (this.shouldRenderTestLogs()) {\n\t\t\tconst duration = new Date().getTime() - this.startTime\n\t\t\tconst friendly = durationUtil.msToFriendly(duration)\n\n\t\t\ttestLog.info(\n\t\t\t\t`${\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\tglobal.activeTest?.test ? global.activeTest?.test + ' :: ' : ''\n\t\t\t\t}${friendly} :: ${message}`\n\t\t\t)\n\t\t}\n\t}\n\n\tpublic async renderImage(\n\t\tpath: string,\n\t\toptions?: ImageDimensions\n\t): Promise<void> {\n\t\tthis.trackInvocation('renderImage', { path, options })\n\t}\n\n\tpublic renderLines(\n\t\tmessages: string[],\n\t\teffects?: GraphicsTextEffect[] | undefined\n\t): void {\n\t\tthis.trackInvocation('renderLines', { messages, effects })\n\t\tthis.term?.renderLines(messages, effects)\n\t}\n\n\tpublic async prompt<T extends FieldDefinitions>(definition: T) {\n\t\tthis.trackInvocation('prompt', definition)\n\n\t\tif (this.promptResolver) {\n\t\t\tthrow new Error(\n\t\t\t\t'Tried to double prompt. Try this.term?.sendInput() before calling prompt next.'\n\t\t\t)\n\t\t}\n\n\t\tlet msg = `${namesUtil.toPascal(definition.type)} Prompt: ${\n\t\t\tdefinition.label\n\t\t}`\n\n\t\tif (definition.type === 'select') {\n\t\t\tmsg += '\\n\\nChoices:\\n'\n\t\t\tdefinition.options.choices.forEach((choice) => {\n\t\t\t\tmsg += `\\n${choice.value}: ${choice.label}`\n\t\t\t})\n\n\t\t\tmsg += '\\n'\n\t\t}\n\n\t\tthis.optionallyRenderLine(msg)\n\n\t\treturn new Promise<FieldDefinitionValueType<FieldDefinitions>>(\n\t\t\t(resolve, reject) => {\n\t\t\t\tthis.promptResolver = (...args: any[]) => {\n\t\t\t\t\tclearTimeout(this.promptTimeout)\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\tresolve(...args)\n\t\t\t\t}\n\t\t\t\tthis.promptTimeout = setTimeout(() => {\n\t\t\t\t\tthis.reset()\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tassert.fail(\n\t\t\t\t\t\t\t`Timed out waiting for input with label: '${definition.label}'\\n\\nConsider passing what you need to Action().execute({ something })`\n\t\t\t\t\t\t)\n\t\t\t\t\t} catch (err: any) {\n\t\t\t\t\t\treject(err)\n\t\t\t\t\t}\n\t\t\t\t}, 10000)\n\t\t\t\tthis.promptDefaultValue = definition.defaultValue\n\t\t\t}\n\t\t)\n\t}\n\n\tpublic startLoading(message?: string | undefined): void {\n\t\tthis.trackInvocation('startLoading', message)\n\t\tthis.optionallyRenderLine(message ? `${message}` : 'Start loading...')\n\t}\n\n\tpublic stopLoading(): void {\n\t\tthis.trackInvocation('stopLoading')\n\t\tthis.optionallyRenderLine('Stop loading...')\n\t}\n\n\tpublic async waitForEnter(message?: string | undefined): Promise<void> {\n\t\tthis.trackInvocation('waitForEnter', message)\n\t\tthis.optionallyRenderLine(\n\t\t\t`${message ? ` ${message}\\n\\n` : ``}Waiting for enter...`\n\t\t)\n\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.waitForEnterResolver = resolve\n\t\t})\n\t}\n\n\tpublic async waitForInput() {\n\t\tconst ttl = 1000 * 60 * 5\n\t\tconst checkInterval = 100\n\t\tlet loops = ttl / checkInterval\n\t\tlet lastWriteCount = this.invocations.length\n\n\t\twhile (!this.isWaitingForInput()) {\n\t\t\tif (loops-- === 0) {\n\t\t\t\tassert.fail(`Waiting for input timed out.`)\n\t\t\t}\n\n\t\t\tconst hasWritten = lastWriteCount != this.invocations.length\n\n\t\t\tif (hasWritten) {\n\t\t\t\tloops = ttl / checkInterval\n\t\t\t\tlastWriteCount = this.invocations.length\n\t\t\t\tif (this.shouldRenderTestLogs()) {\n\t\t\t\t\ttestUtil.log('waitForInput timeout reset because of new output.')\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, checkInterval))\n\t\t}\n\t}\n\n\tpublic confirm(question: string): Promise<boolean> {\n\t\tthis.trackInvocation('confirm', question)\n\t\tthis.optionallyRenderLine(`${question} :: Y/N...`)\n\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.confirmResolver = resolve\n\t\t})\n\t}\n\n\tpublic clear(): void {\n\t\tthis.trackInvocation('clear')\n\t}\n\n\tpublic renderProgressBar(options: ProgressBarOptions): void {\n\t\tthis.trackInvocation('renderProgressBar', options)\n\t\tthis.optionallyRenderLine(\n\t\t\t`Showing progress${options.title ? ` ${options.title}` : ``}`\n\t\t)\n\t}\n\n\tpublic updateProgressBar(options: ProgressBarUpdateOptions): void {\n\t\tthis.trackInvocation('updateProgressBar', options)\n\t}\n\n\tpublic removeProgressBar(): void {\n\t\tthis.trackInvocation('removeProgressBar')\n\t\tthis.optionallyRenderLine(`Hiding progress`)\n\t}\n\n\tpublic async getCursorPosition(): Promise<{ x: number; y: number } | null> {\n\t\tthis.trackInvocation('getCursorPosition')\n\t\treturn this.cursorPosition\n\t}\n\n\tpublic setCursorPosition(pos: { x: number; y: number }) {\n\t\tthis.cursorPosition = pos\n\t}\n\n\tpublic moveCursorTo(x: number, y: number): void {\n\t\tthis.trackInvocation('moveCursorTo', { x, y })\n\t}\n\n\tpublic clearBelowCursor(): void {\n\t\tthis.trackInvocation('clearBelowCursor')\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SpyInterface.js","names":["SpyInterface","x","y","startTime","Date","getTime","term","shouldRenderTestLogs","TerminalInterface","process","cwd","strs","optionallyRenderLine","join","undefined","env","SHOULD_RENDER_TEST_LOGS","message","effects","trackInvocation","renderWarning","renderHint","command","options","invocations","push","promptResolver","confirmResolver","waitForEnterResolver","clearTimeout","promptTimeout","length","input","resolver","promptDefaultValue","toLowerCase","Error","Promise","resolve","setTimeout","renderSection","obj","renderObject","err","renderError","code","renderCodeSample","results","renderActionSummary","renderHero","dividerEffects","renderHeadline","renderDivider","duration","friendly","durationUtil","msToFriendly","testLog","info","global","activeTest","test","path","messages","renderLines","definition","msg","namesUtil","toPascal","type","label","choices","forEach","choice","value","reject","reset","assert","fail","defaultValue","ttl","checkInterval","loops","lastWriteCount","isWaitingForInput","hasWritten","testUtil","log","question","title","cursorPosition","pos"],"sources":["../../src/interfaces/SpyInterface.ts"],"sourcesContent":["import { FieldDefinitionValueType } from '@sprucelabs/schema'\nimport { namesUtil, testLog } from '@sprucelabs/spruce-skill-utils'\nimport { assert } from '@sprucelabs/test'\nimport { FieldDefinitions } from '#spruce/schemas/fields/fields.types'\nimport testUtil from '../tests/utilities/test.utility'\nimport { ExecutionResults } from '../types/cli.types'\nimport { GraphicsInterface } from '../types/cli.types'\nimport {\n\tGraphicsTextEffect,\n\tProgressBarOptions,\n\tProgressBarUpdateOptions,\n\tImageDimensions,\n} from '../types/graphicsInterface.types'\nimport durationUtil from '../utilities/duration.utility'\nimport TerminalInterface from './TerminalInterface'\n\nexport default class SpyInterface implements GraphicsInterface {\n\tpublic invocations: { command: string; options?: any }[] = []\n\tprivate cursorPosition = { x: 0, y: 0 }\n\n\tprivate promptResolver?: (\n\t\tinput: FieldDefinitionValueType<FieldDefinitions>\n\t) => void | undefined\n\n\tprivate confirmResolver?: (pass: boolean) => void | undefined\n\tprivate waitForEnterResolver?: () => void | undefined\n\tprivate promptDefaultValue: any\n\tprivate term?: TerminalInterface\n\tprivate startTime: number\n\tprivate promptTimeout?: any\n\n\tpublic constructor() {\n\t\tthis.startTime = new Date().getTime()\n\n\t\tthis.term = this.shouldRenderTestLogs()\n\t\t\t? new TerminalInterface(process.cwd(), true, (...strs: []) => {\n\t\t\t\t\tthis.optionallyRenderLine(strs.join(' '))\n\t\t\t })\n\t\t\t: undefined\n\t}\n\n\tprivate shouldRenderTestLogs() {\n\t\treturn process.env.SHOULD_RENDER_TEST_LOGS === 'true'\n\t}\n\n\tpublic renderWarning(\n\t\tmessage: string,\n\t\teffects?: GraphicsTextEffect[] | undefined\n\t): void {\n\t\tthis.trackInvocation('renderWarning', { message, effects })\n\t\tthis.term?.renderWarning(message)\n\t}\n\n\tpublic renderHint(\n\t\tmessage: string,\n\t\teffects?: GraphicsTextEffect[] | undefined\n\t): void {\n\t\tthis.trackInvocation('renderHint', { message, effects })\n\t\tthis.optionallyRenderLine(`Hint: ${message}`)\n\t\tthis.term?.renderHint(message)\n\t}\n\n\tprivate trackInvocation(command: string, options?: any) {\n\t\t// testUtil.log(command, JSON.stringify(options), '\\n')\n\t\tthis.invocations.push({ command, options })\n\t}\n\n\tpublic isWaitingForInput() {\n\t\treturn !!(\n\t\t\tthis.promptResolver ||\n\t\t\tthis.confirmResolver ||\n\t\t\tthis.waitForEnterResolver\n\t\t)\n\t}\n\n\tpublic reset() {\n\t\tthis.promptResolver = undefined\n\t\tthis.confirmResolver = undefined\n\t\tthis.waitForEnterResolver = undefined\n\t\tclearTimeout(this.promptTimeout)\n\t}\n\n\tpublic getLastInvocation() {\n\t\treturn this.invocations[this.invocations.length - 1]\n\t}\n\n\tpublic async sendInput(input: string | string[]): Promise<void> {\n\t\tthis.trackInvocation('sendInput', input)\n\n\t\tthis.optionallyRenderLine(\n\t\t\t`Sending input: \"${input.length > 0 ? input : 'ENTER'}\"`\n\t\t)\n\n\t\tif (this.waitForEnterResolver) {\n\t\t\tconst resolver = this.waitForEnterResolver\n\t\t\tthis.waitForEnterResolver = undefined\n\n\t\t\tresolver()\n\t\t} else if (this.promptResolver) {\n\t\t\tconst resolver = this.promptResolver\n\t\t\tthis.promptResolver = undefined\n\n\t\t\tresolver(input !== '\\n' && input !== '' ? input : this.promptDefaultValue)\n\t\t} else if (this.confirmResolver) {\n\t\t\tconst resolver = this.confirmResolver\n\t\t\tthis.confirmResolver = undefined\n\n\t\t\tresolver(\n\t\t\t\tinput === '\\n' ||\n\t\t\t\t\tinput.length === 0 ||\n\t\t\t\t\t(typeof input === 'string' && input.toLowerCase() === 'y')\n\t\t\t)\n\t\t} else {\n\t\t\tthrow new Error('Sent input before prompted for input')\n\t\t}\n\n\t\treturn new Promise((resolve) => {\n\t\t\tsetTimeout(resolve, 50)\n\t\t})\n\t}\n\n\tpublic renderSection(options: {\n\t\theadline: string\n\t\tlines?: string[] | string[]\n\t\theadlineEffects?: GraphicsTextEffect[]\n\t\tdividerEffects?: GraphicsTextEffect[]\n\t\tbodyEffects?: GraphicsTextEffect[]\n\t\tobject?: any\n\t}): void {\n\t\tthis.trackInvocation('renderSection', options)\n\t\tthis.term?.renderSection(options)\n\t}\n\n\tpublic renderObject(obj: any): void {\n\t\tthis.trackInvocation('renderObject', obj)\n\t\tthis.term?.renderObject(obj)\n\t}\n\n\tpublic renderError(err: Error): void {\n\t\tthis.trackInvocation('renderError', err)\n\t\tthis.term?.renderError(err)\n\t}\n\n\tpublic renderCodeSample(code: string): void {\n\t\tthis.trackInvocation('renderCodeSample', code)\n\t\tthis.term?.renderCodeSample(code)\n\t}\n\n\tpublic renderActionSummary(results: ExecutionResults): void {\n\t\tthis.trackInvocation('renderCommandSummary', results)\n\t\tthis.term?.renderActionSummary(results)\n\t}\n\n\tpublic renderHero(\n\t\tmessage: string,\n\t\teffects?: GraphicsTextEffect[] | undefined\n\t): void {\n\t\tthis.trackInvocation('renderHero', { message, effects })\n\t\tthis.term?.renderHero(message, effects)\n\t}\n\n\tpublic renderHeadline(\n\t\tmessage: string,\n\t\teffects: GraphicsTextEffect[],\n\t\tdividerEffects: GraphicsTextEffect[]\n\t): void {\n\t\tthis.trackInvocation('renderHeadline', { message, effects, dividerEffects })\n\t\tthis.term?.renderHeadline(message, effects, dividerEffects)\n\t}\n\n\tpublic renderDivider(effects?: GraphicsTextEffect[] | undefined): void {\n\t\tthis.trackInvocation('renderDivider', effects)\n\t\tthis.term?.renderDivider(effects)\n\t}\n\n\tpublic renderLine(\n\t\tmessage: string,\n\t\teffects?: GraphicsTextEffect[] | undefined\n\t): void {\n\t\tthis.trackInvocation('renderLine', { message, effects })\n\t\tmessage && message.length > 0 && this.optionallyRenderLine(message)\n\t}\n\n\tprivate optionallyRenderLine(message: string) {\n\t\tif (this.shouldRenderTestLogs()) {\n\t\t\tconst duration = new Date().getTime() - this.startTime\n\t\t\tconst friendly = durationUtil.msToFriendly(duration)\n\n\t\t\ttestLog.info(\n\t\t\t\t`${\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\tglobal.activeTest?.test ? global.activeTest?.test + ' :: ' : ''\n\t\t\t\t}${friendly} :: ${message}`\n\t\t\t)\n\t\t}\n\t}\n\n\tpublic async renderImage(\n\t\tpath: string,\n\t\toptions?: ImageDimensions\n\t): Promise<void> {\n\t\tthis.trackInvocation('renderImage', { path, options })\n\t}\n\n\tpublic renderLines(\n\t\tmessages: string[],\n\t\teffects?: GraphicsTextEffect[] | undefined\n\t): void {\n\t\tthis.trackInvocation('renderLines', { messages, effects })\n\t\tthis.term?.renderLines(messages, effects)\n\t}\n\n\tpublic async prompt<T extends FieldDefinitions>(definition: T) {\n\t\tthis.trackInvocation('prompt', definition)\n\n\t\tif (this.promptResolver) {\n\t\t\tthrow new Error(\n\t\t\t\t'Tried to double prompt. Try this.term?.sendInput() before calling prompt next.'\n\t\t\t)\n\t\t}\n\n\t\tlet msg = `${namesUtil.toPascal(definition.type)} Prompt: ${\n\t\t\tdefinition.label\n\t\t}`\n\n\t\tif (definition.type === 'select') {\n\t\t\tmsg += '\\n\\nChoices:\\n'\n\t\t\tdefinition.options.choices.forEach((choice) => {\n\t\t\t\tmsg += `\\n${choice.value}: ${choice.label}`\n\t\t\t})\n\n\t\t\tmsg += '\\n'\n\t\t}\n\n\t\tthis.optionallyRenderLine(msg)\n\n\t\treturn new Promise<FieldDefinitionValueType<FieldDefinitions>>(\n\t\t\t(resolve, reject) => {\n\t\t\t\tthis.promptResolver = (...args: any[]) => {\n\t\t\t\t\tclearTimeout(this.promptTimeout)\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\tresolve(...args)\n\t\t\t\t}\n\t\t\t\tthis.promptTimeout = setTimeout(() => {\n\t\t\t\t\tthis.reset()\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tassert.fail(\n\t\t\t\t\t\t\t`Timed out waiting for input with label: '${definition.label}'\\n\\nConsider passing what you need to Action().execute({ something })`\n\t\t\t\t\t\t)\n\t\t\t\t\t} catch (err: any) {\n\t\t\t\t\t\treject(err)\n\t\t\t\t\t}\n\t\t\t\t}, 10000)\n\t\t\t\tthis.promptDefaultValue = definition.defaultValue\n\t\t\t}\n\t\t)\n\t}\n\n\tpublic startLoading(message?: string | undefined): void {\n\t\tthis.trackInvocation('startLoading', message)\n\t\tthis.optionallyRenderLine(message ? `${message}` : 'Start loading...')\n\t}\n\n\tpublic stopLoading(): void {\n\t\tthis.trackInvocation('stopLoading')\n\t\tthis.optionallyRenderLine('Stop loading...')\n\t}\n\n\tpublic async waitForEnter(message?: string | undefined): Promise<void> {\n\t\tthis.trackInvocation('waitForEnter', message)\n\t\tthis.optionallyRenderLine(\n\t\t\t`${message ? ` ${message}\\n\\n` : ``}Waiting for enter...`\n\t\t)\n\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.waitForEnterResolver = resolve\n\t\t})\n\t}\n\n\tpublic async waitForInput() {\n\t\tconst ttl = 1000 * 60 * 5\n\t\tconst checkInterval = 100\n\t\tlet loops = ttl / checkInterval\n\t\tlet lastWriteCount = this.invocations.length\n\n\t\twhile (!this.isWaitingForInput()) {\n\t\t\tif (loops-- === 0) {\n\t\t\t\tassert.fail(`Waiting for input timed out.`)\n\t\t\t}\n\n\t\t\tconst hasWritten = lastWriteCount != this.invocations.length\n\n\t\t\tif (hasWritten) {\n\t\t\t\tloops = ttl / checkInterval\n\t\t\t\tlastWriteCount = this.invocations.length\n\t\t\t\tif (this.shouldRenderTestLogs()) {\n\t\t\t\t\ttestUtil.log('waitForInput timeout reset because of new output.')\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, checkInterval))\n\t\t}\n\t}\n\n\tpublic confirm(question: string): Promise<boolean> {\n\t\tthis.trackInvocation('confirm', question)\n\t\tthis.optionallyRenderLine(`${question} :: Y/N...`)\n\n\t\treturn new Promise((resolve) => {\n\t\t\tthis.confirmResolver = resolve\n\t\t})\n\t}\n\n\tpublic clear(): void {\n\t\tthis.trackInvocation('clear')\n\t}\n\n\tpublic renderProgressBar(options: ProgressBarOptions): void {\n\t\tthis.trackInvocation('renderProgressBar', options)\n\t\tthis.optionallyRenderLine(\n\t\t\t`Showing progress${options.title ? ` ${options.title}` : ``}`\n\t\t)\n\t}\n\n\tpublic updateProgressBar(options: ProgressBarUpdateOptions): void {\n\t\tthis.trackInvocation('updateProgressBar', options)\n\t}\n\n\tpublic removeProgressBar(): void {\n\t\tthis.trackInvocation('removeProgressBar')\n\t\tthis.optionallyRenderLine(`Hiding progress`)\n\t}\n\n\tpublic async getCursorPosition(): Promise<{ x: number; y: number } | null> {\n\t\tthis.trackInvocation('getCursorPosition')\n\t\treturn this.cursorPosition\n\t}\n\n\tpublic setCursorPosition(pos: { x: number; y: number }) {\n\t\tthis.cursorPosition = pos\n\t}\n\n\tpublic moveCursorTo(x: number, y: number): void {\n\t\tthis.trackInvocation('moveCursorTo', { x, y })\n\t}\n\n\tpublic clearBelowCursor(): void {\n\t\tthis.trackInvocation('clearBelowCursor')\n\t}\n}\n"],"mappings":"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"}
|