@sprucelabs/spruce-cli 28.2.3 → 29.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 +24 -0
- package/build/.spruce/errors/errors.types.d.ts +23 -2
- package/build/.spruce/errors/options.types.d.ts +4 -1
- package/build/.spruce/errors/spruceCli/directoryNotGoModule.schema.d.ts +3 -0
- package/build/.spruce/errors/spruceCli/directoryNotGoModule.schema.js +20 -0
- package/build/.spruce/errors/spruceCli/directoryNotGoModule.schema.js.map +1 -0
- package/build/__tests__/behavioral/OverridingCommandsInPackageJson.test.d.ts +7 -2
- package/build/__tests__/behavioral/OverridingCommandsInPackageJson.test.js +36 -13
- package/build/__tests__/behavioral/OverridingCommandsInPackageJson.test.js.map +1 -1
- package/build/__tests__/behavioral/events/DifferentEventOptions.test.d.ts +16 -0
- package/build/__tests__/behavioral/events/DifferentEventOptions.test.js +105 -0
- package/build/__tests__/behavioral/events/DifferentEventOptions.test.js.map +1 -0
- package/build/__tests__/behavioral/events/KeepingEventsInSync.test.js.map +1 -1
- package/build/__tests__/behavioral/features/InstallFeaturesInGo.test.d.ts +5 -0
- package/build/__tests__/behavioral/features/InstallFeaturesInGo.test.js +32 -0
- package/build/__tests__/behavioral/features/InstallFeaturesInGo.test.js.map +1 -0
- package/build/__tests__/behavioral/organization/CreatingAnOrg.test.d.ts +5 -0
- package/build/__tests__/behavioral/organization/CreatingAnOrg.test.js +21 -13
- package/build/__tests__/behavioral/organization/CreatingAnOrg.test.js.map +1 -1
- package/build/__tests__/behavioral/schemas/KeepingSchemasInSync.test.d.ts +1 -1
- package/build/__tests__/behavioral/schemas/KeepingSchemasInSync.test.js +7 -7
- package/build/__tests__/behavioral/schemas/KeepingSchemasInSync.test.js.map +1 -1
- package/build/__tests__/behavioral/schemas/SyncingCoreSchemasInGo.test.d.ts +39 -0
- package/build/__tests__/behavioral/schemas/SyncingCoreSchemasInGo.test.js +289 -0
- package/build/__tests__/behavioral/schemas/SyncingCoreSchemasInGo.test.js.map +1 -0
- package/build/__tests__/behavioral/schemas/SyncingSchemasInChildDirInGo.test.d.ts +7 -0
- package/build/__tests__/behavioral/schemas/SyncingSchemasInChildDirInGo.test.js +46 -0
- package/build/__tests__/behavioral/schemas/SyncingSchemasInChildDirInGo.test.js.map +1 -0
- package/build/__tests__/behavioral/schemas/SyncingSchemasInGo.test.d.ts +5 -0
- package/build/__tests__/behavioral/schemas/SyncingSchemasInGo.test.js +31 -0
- package/build/__tests__/behavioral/schemas/SyncingSchemasInGo.test.js.map +1 -0
- package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.js +1 -1
- package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.js.map +1 -1
- package/build/__tests__/behavioral/upgrading/UpdatingDependencies2.test.js +10 -1
- package/build/__tests__/behavioral/upgrading/UpdatingDependencies2.test.js.map +1 -1
- package/build/__tests__/implementation/SkillStore.test.d.ts +5 -0
- package/build/__tests__/implementation/SkillStore.test.js +37 -0
- package/build/__tests__/implementation/SkillStore.test.js.map +1 -1
- package/build/__tests__/support/EventFaker.d.ts +7 -0
- package/build/__tests__/support/EventFaker.js +43 -0
- package/build/__tests__/support/EventFaker.js.map +1 -1
- package/build/cli/Cli.js +12 -9
- package/build/cli/Cli.js.map +1 -1
- package/build/errors/SpruceError.js +3 -0
- package/build/errors/SpruceError.js.map +1 -1
- package/build/errors/directoryNotGoModule.builder.d.ts +12 -0
- package/build/errors/directoryNotGoModule.builder.js +15 -0
- package/build/errors/directoryNotGoModule.builder.js.map +1 -0
- package/build/features/AbstractAction.d.ts +1 -0
- package/build/features/AbstractAction.js +5 -1
- package/build/features/AbstractAction.js.map +1 -1
- package/build/features/AbstractFeature.d.ts +8 -1
- package/build/features/AbstractFeature.js +12 -1
- package/build/features/AbstractFeature.js.map +1 -1
- package/build/features/ActionFactory.js +1 -2
- package/build/features/ActionFactory.js.map +1 -1
- package/build/features/ActionQuestionAsker.js +0 -1
- package/build/features/ActionQuestionAsker.js.map +1 -1
- package/build/features/FeatureInstaller.d.ts +1 -0
- package/build/features/FeatureInstaller.js +21 -7
- package/build/features/FeatureInstaller.js.map +1 -1
- package/build/features/FeatureInstallerFactory.d.ts +1 -0
- package/build/features/FeatureInstallerFactory.js +7 -0
- package/build/features/FeatureInstallerFactory.js.map +1 -1
- package/build/features/OverrideActionDecorator.js +1 -1
- package/build/features/OverrideActionDecorator.js.map +1 -1
- package/build/features/VersionResolver.js +1 -1
- package/build/features/VersionResolver.js.map +1 -1
- package/build/features/agent/AgentFeature.d.ts +1 -1
- package/build/features/agent/AgentFeature.js +1 -1
- package/build/features/agent/AgentFeature.js.map +1 -1
- package/build/features/conversation/ConversationFeature.d.ts +1 -1
- package/build/features/conversation/ConversationFeature.js +1 -1
- package/build/features/conversation/ConversationFeature.js.map +1 -1
- package/build/features/dependencies/DependencyFeature.d.ts +0 -1
- package/build/features/dependencies/DependencyFeature.js +0 -1
- package/build/features/dependencies/DependencyFeature.js.map +1 -1
- package/build/features/deploy/DeployFeature.d.ts +1 -1
- package/build/features/deploy/DeployFeature.js +1 -1
- package/build/features/deploy/DeployFeature.js.map +1 -1
- package/build/features/error/ErrorFeature.d.ts +1 -1
- package/build/features/error/ErrorFeature.js +1 -1
- package/build/features/error/ErrorFeature.js.map +1 -1
- package/build/features/event/EventFeature.d.ts +1 -1
- package/build/features/event/EventFeature.js +1 -1
- package/build/features/event/EventFeature.js.map +1 -1
- package/build/features/eventContract/EventContractFeature.d.ts +1 -3
- package/build/features/eventContract/EventContractFeature.js +0 -2
- package/build/features/eventContract/EventContractFeature.js.map +1 -1
- package/build/features/node/NodeFeature.d.ts +1 -1
- package/build/features/node/NodeFeature.js +1 -1
- package/build/features/node/NodeFeature.js.map +1 -1
- package/build/features/onboard/OnboardFeature.d.ts +1 -3
- package/build/features/onboard/OnboardFeature.js +0 -2
- package/build/features/onboard/OnboardFeature.js.map +1 -1
- package/build/features/organization/OrganizationFeature.d.ts +0 -1
- package/build/features/organization/OrganizationFeature.js +0 -1
- package/build/features/organization/OrganizationFeature.js.map +1 -1
- package/build/features/permission/PermissionFeature.d.ts +2 -3
- package/build/features/permission/PermissionFeature.js +1 -2
- package/build/features/permission/PermissionFeature.js.map +1 -1
- package/build/features/person/PersonFeature.d.ts +1 -3
- package/build/features/person/PersonFeature.js +0 -2
- package/build/features/person/PersonFeature.js.map +1 -1
- package/build/features/polish/PolishFeature.d.ts +1 -1
- package/build/features/polish/PolishFeature.js +1 -1
- package/build/features/polish/PolishFeature.js.map +1 -1
- package/build/features/sandbox/SandboxFeature.d.ts +0 -1
- package/build/features/sandbox/SandboxFeature.js +0 -1
- package/build/features/sandbox/SandboxFeature.js.map +1 -1
- package/build/features/schema/SchemaFeature.d.ts +2 -3
- package/build/features/schema/SchemaFeature.js +6 -1
- package/build/features/schema/SchemaFeature.js.map +1 -1
- package/build/features/schema/actions/SyncAction.d.ts +5 -2
- package/build/features/schema/actions/SyncAction.js +50 -16
- package/build/features/schema/actions/SyncAction.js.map +1 -1
- package/build/features/schema/utilities/schemaDisk.utility.d.ts +7 -0
- package/build/features/schema/utilities/schemaDisk.utility.js +22 -4
- package/build/features/schema/utilities/schemaDisk.utility.js.map +1 -1
- package/build/features/schema/utilities/schemaGenerator.utility.d.ts +1 -0
- package/build/features/schema/utilities/schemaGenerator.utility.js +18 -10
- package/build/features/schema/utilities/schemaGenerator.utility.js.map +1 -1
- package/build/features/schema/writers/SchemaWriter.d.ts +9 -9
- package/build/features/schema/writers/SchemaWriter.js +38 -17
- package/build/features/schema/writers/SchemaWriter.js.map +1 -1
- package/build/features/skill/SkillFeature.d.ts +1 -1
- package/build/features/skill/SkillFeature.js +1 -1
- package/build/features/skill/SkillFeature.js.map +1 -1
- package/build/features/skill/stores/SkillStore.d.ts +5 -0
- package/build/features/skill/stores/SkillStore.js +40 -3
- package/build/features/skill/stores/SkillStore.js.map +1 -1
- package/build/features/store/StoreFeature.d.ts +1 -1
- package/build/features/store/StoreFeature.js +1 -1
- package/build/features/store/StoreFeature.js.map +1 -1
- package/build/features/test/TestFeature.d.ts +1 -1
- package/build/features/test/TestFeature.js +1 -1
- package/build/features/test/TestFeature.js.map +1 -1
- package/build/features/test/TestReporter.js +1 -1
- package/build/features/test/TestReporter.js.map +1 -1
- package/build/features/view/ViewFeature.d.ts +1 -1
- package/build/features/view/ViewFeature.js +1 -1
- package/build/features/view/ViewFeature.js.map +1 -1
- package/build/migration/EsLint9Migrator.d.ts +1 -0
- package/build/packageManager/NodePackageManager.d.ts +14 -0
- package/build/packageManager/NodePackageManager.js +88 -0
- package/build/packageManager/NodePackageManager.js.map +1 -0
- package/build/packageManager/packageManager.types.d.ts +16 -0
- package/build/packageManager/packageManager.types.js +3 -0
- package/build/packageManager/packageManager.types.js.map +1 -0
- package/build/services/GoPackageManager.d.ts +10 -0
- package/build/services/GoPackageManager.js +39 -0
- package/build/services/GoPackageManager.js.map +1 -0
- package/build/services/PkgService.d.ts +3 -7
- package/build/services/PkgService.js +13 -68
- package/build/services/PkgService.js.map +1 -1
- package/build/templateItemBuilders/SchemaTemplateItemBuilder.js.map +1 -1
- package/build/tests/AbstractCliTest.d.ts +5 -1
- package/build/tests/AbstractCliTest.js +15 -3
- package/build/tests/AbstractCliTest.js.map +1 -1
- package/build/tests/fixtures/FeatureFixture.js +4 -1
- package/build/tests/fixtures/FeatureFixture.js.map +1 -1
- package/build/tests/fixtures/GoFixture.d.ts +12 -0
- package/build/tests/fixtures/GoFixture.js +39 -0
- package/build/tests/fixtures/GoFixture.js.map +1 -0
- package/build/tests/staticToInstanceMigration/StaticToInstanceMigrator.d.ts +1 -0
- package/build/widgets/terminalKit/TkTextWidget.js +3 -2
- package/build/widgets/terminalKit/TkTextWidget.js.map +1 -1
- package/build/writers/AbstractWriter.js +7 -6
- package/build/writers/AbstractWriter.js.map +1 -1
- package/package.json +30 -30
- package/src/.spruce/errors/errors.types.ts +32 -2
- package/src/.spruce/errors/options.types.ts +4 -1
- package/src/.spruce/errors/spruceCli/directoryNotGoModule.schema.ts +23 -0
- package/src/__tests__/behavioral/OverridingCommandsInPackageJson.test.ts +60 -13
- package/src/__tests__/behavioral/events/DifferentEventOptions.test.ts +134 -0
- package/src/__tests__/behavioral/events/KeepingEventsInSync.test.ts +0 -1
- package/src/__tests__/behavioral/features/InstallFeaturesInGo.test.ts +17 -0
- package/src/__tests__/behavioral/organization/CreatingAnOrg.test.ts +29 -22
- package/src/__tests__/behavioral/schemas/KeepingSchemasInSync.test.ts +6 -9
- package/src/__tests__/behavioral/schemas/SyncingCoreSchemasInGo.test.ts +376 -0
- package/src/__tests__/behavioral/schemas/SyncingSchemasInChildDirInGo.test.ts +46 -0
- package/src/__tests__/behavioral/schemas/SyncingSchemasInGo.test.ts +23 -0
- package/src/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.ts +1 -1
- package/src/__tests__/behavioral/upgrading/UpdatingDependencies2.test.ts +15 -2
- package/src/__tests__/implementation/SkillStore.test.ts +44 -1
- package/src/__tests__/support/EventFaker.ts +56 -0
- package/src/cli/Cli.ts +20 -12
- package/src/errors/SpruceError.ts +4 -0
- package/src/errors/directoryNotGoModule.builder.ts +13 -0
- package/src/features/AbstractAction.ts +6 -4
- package/src/features/AbstractFeature.ts +20 -1
- package/src/features/ActionFactory.ts +2 -2
- package/src/features/ActionQuestionAsker.ts +0 -1
- package/src/features/FeatureInstaller.ts +30 -6
- package/src/features/FeatureInstallerFactory.ts +9 -0
- package/src/features/OverrideActionDecorator.ts +1 -1
- package/src/features/VersionResolver.ts +2 -1
- package/src/features/agent/AgentFeature.ts +1 -1
- package/src/features/conversation/ConversationFeature.ts +1 -1
- package/src/features/dependencies/DependencyFeature.ts +0 -1
- package/src/features/deploy/DeployFeature.ts +1 -1
- package/src/features/error/ErrorFeature.ts +1 -1
- package/src/features/event/EventFeature.ts +1 -1
- package/src/features/eventContract/EventContractFeature.ts +1 -3
- package/src/features/node/NodeFeature.ts +1 -1
- package/src/features/onboard/OnboardFeature.ts +1 -7
- package/src/features/organization/OrganizationFeature.ts +0 -1
- package/src/features/permission/PermissionFeature.ts +1 -3
- package/src/features/person/PersonFeature.ts +1 -4
- package/src/features/polish/PolishFeature.ts +1 -1
- package/src/features/sandbox/SandboxFeature.ts +0 -1
- package/src/features/schema/SchemaFeature.ts +8 -2
- package/src/features/schema/actions/SyncAction.ts +68 -26
- package/src/features/schema/utilities/schemaDisk.utility.ts +43 -11
- package/src/features/schema/utilities/schemaGenerator.utility.ts +33 -13
- package/src/features/schema/writers/SchemaWriter.ts +71 -25
- package/src/features/skill/SkillFeature.ts +1 -1
- package/src/features/skill/stores/SkillStore.ts +51 -5
- package/src/features/store/StoreFeature.ts +1 -1
- package/src/features/test/TestFeature.ts +1 -1
- package/src/features/test/TestReporter.ts +1 -1
- package/src/features/view/ViewFeature.ts +1 -1
- package/src/packageManager/NodePackageManager.ts +115 -0
- package/src/packageManager/packageManager.types.ts +21 -0
- package/src/services/GoPackageManager.ts +45 -0
- package/src/services/PkgService.ts +17 -92
- package/src/templateItemBuilders/SchemaTemplateItemBuilder.ts +6 -6
- package/src/tests/AbstractCliTest.ts +19 -5
- package/src/tests/fixtures/FeatureFixture.ts +3 -1
- package/src/tests/fixtures/GoFixture.ts +39 -0
- package/src/widgets/terminalKit/TkTextWidget.ts +3 -2
- package/src/writers/AbstractWriter.ts +15 -6
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { buildErrorSchema } from '@sprucelabs/schema'
|
|
2
|
+
|
|
3
|
+
export default buildErrorSchema({
|
|
4
|
+
id: 'directoryNotGoModule',
|
|
5
|
+
name: 'Directory not go module',
|
|
6
|
+
fields: {
|
|
7
|
+
cwd: {
|
|
8
|
+
type: 'text',
|
|
9
|
+
label: 'Current Working Directory',
|
|
10
|
+
isRequired: true,
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
})
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Schema, SchemaValues, SchemaPartialValues } from '@sprucelabs/schema'
|
|
2
|
+
import { diskUtil } from '@sprucelabs/spruce-skill-utils'
|
|
2
3
|
import { Templates } from '@sprucelabs/spruce-templates'
|
|
3
4
|
import { GlobalEmitter } from '../GlobalEmitter'
|
|
4
5
|
import ServiceFactory, {
|
|
@@ -111,14 +112,15 @@ export default abstract class AbstractAction<S extends Schema = Schema>
|
|
|
111
112
|
return validateAndNormalizer.validateAndNormalize(schema, options)
|
|
112
113
|
}
|
|
113
114
|
|
|
115
|
+
protected getProjectLanguage() {
|
|
116
|
+
return diskUtil.detectProjectLanguage(this.cwd)
|
|
117
|
+
}
|
|
118
|
+
|
|
114
119
|
protected async resolveVersion(
|
|
115
120
|
userSuppliedVersion: string | null | undefined,
|
|
116
121
|
resolvedDestination: string
|
|
117
122
|
) {
|
|
118
|
-
const versions = VersionResolver.Resolver(
|
|
119
|
-
this.ui,
|
|
120
|
-
this.serviceFactory.Service(this.cwd, 'pkg')
|
|
121
|
-
)
|
|
123
|
+
const versions = VersionResolver.Resolver(this.ui, this.Service('pkg'))
|
|
122
124
|
const version = await versions.resolveVersion(
|
|
123
125
|
resolvedDestination,
|
|
124
126
|
userSuppliedVersion
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import pathUtil from 'path'
|
|
2
2
|
import globby from '@sprucelabs/globby'
|
|
3
3
|
import { Schema, SchemaValues } from '@sprucelabs/schema'
|
|
4
|
+
import { diskUtil } from '@sprucelabs/spruce-skill-utils'
|
|
4
5
|
import { Templates } from '@sprucelabs/spruce-templates'
|
|
5
6
|
import { GlobalEmitter } from '../GlobalEmitter'
|
|
6
7
|
import ServiceFactory, {
|
|
@@ -34,7 +35,14 @@ export default abstract class AbstractFeature<
|
|
|
34
35
|
{
|
|
35
36
|
public abstract description: string
|
|
36
37
|
public readonly dependencies: FeatureDependency[] = []
|
|
37
|
-
|
|
38
|
+
protected _packageDependencies: PackageDependency[] = []
|
|
39
|
+
public get packageDependencies() {
|
|
40
|
+
const resolved = this._packageDependencies.filter((dep) => {
|
|
41
|
+
const goDep = dep as GoPackage
|
|
42
|
+
return !goDep.type || goDep.type === this.getProjectLanguage()
|
|
43
|
+
})
|
|
44
|
+
return resolved
|
|
45
|
+
}
|
|
38
46
|
public readonly optionsSchema?: S
|
|
39
47
|
public readonly fileDescriptions: FileDescription[] = []
|
|
40
48
|
|
|
@@ -114,6 +122,10 @@ export default abstract class AbstractFeature<
|
|
|
114
122
|
return this.features.getFeature(code)
|
|
115
123
|
}
|
|
116
124
|
|
|
125
|
+
public getProjectLanguage() {
|
|
126
|
+
return diskUtil.detectProjectLanguage(this.cwd)
|
|
127
|
+
}
|
|
128
|
+
|
|
117
129
|
public async getAvailableActionCodes(): Promise<string[]> {
|
|
118
130
|
if (!this.actionsDir) {
|
|
119
131
|
return []
|
|
@@ -176,3 +188,10 @@ export interface FeatureOptions {
|
|
|
176
188
|
apiClientFactory: ApiClientFactory
|
|
177
189
|
actionExecuter: ActionExecuter
|
|
178
190
|
}
|
|
191
|
+
|
|
192
|
+
export type PackageDependency = NpmPackage | GoPackage
|
|
193
|
+
|
|
194
|
+
export interface GoPackage {
|
|
195
|
+
type: 'go'
|
|
196
|
+
name: string
|
|
197
|
+
}
|
|
@@ -43,7 +43,8 @@ export default class ActionFactory {
|
|
|
43
43
|
)
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
let Class: new (options: ActionOptions) => FeatureAction | undefined
|
|
46
|
+
let Class: (new (options: ActionOptions) => FeatureAction) | undefined =
|
|
47
|
+
undefined
|
|
47
48
|
let originalError: Error | undefined
|
|
48
49
|
|
|
49
50
|
const key = ActionFactory.overrideKey(featureCode, actionCode)
|
|
@@ -61,7 +62,6 @@ export default class ActionFactory {
|
|
|
61
62
|
}
|
|
62
63
|
}
|
|
63
64
|
|
|
64
|
-
//@ts-ignore
|
|
65
65
|
if (!Class) {
|
|
66
66
|
throw new SpruceError({
|
|
67
67
|
code: 'GENERIC',
|
|
@@ -9,7 +9,10 @@ import ServiceFactory, {
|
|
|
9
9
|
ServiceMap,
|
|
10
10
|
} from '../services/ServiceFactory'
|
|
11
11
|
import { InternalUpdateHandler, NpmPackage } from '../types/cli.types'
|
|
12
|
-
import AbstractFeature, {
|
|
12
|
+
import AbstractFeature, {
|
|
13
|
+
FeatureDependency,
|
|
14
|
+
GoPackage,
|
|
15
|
+
} from './AbstractFeature'
|
|
13
16
|
import {
|
|
14
17
|
InstallFeatureOptions,
|
|
15
18
|
FeatureInstallResponse,
|
|
@@ -107,11 +110,14 @@ export class FeatureInstallerImpl implements ServiceProvider, FeatureInstaller {
|
|
|
107
110
|
|
|
108
111
|
public getFeatureDependencies<C extends FeatureCode>(
|
|
109
112
|
featureCode: C
|
|
110
|
-
// trackedFeatures: FeatureDependency[] = []
|
|
111
113
|
): FeatureDependency[] {
|
|
114
|
+
if (this.isInGoProject()) {
|
|
115
|
+
return []
|
|
116
|
+
}
|
|
117
|
+
|
|
112
118
|
let deps = this.getFeatureDependenciesIncludingSelf(
|
|
113
119
|
{ code: featureCode, isRequired: true },
|
|
114
|
-
[]
|
|
120
|
+
[]
|
|
115
121
|
).filter((f) => f.code !== featureCode)
|
|
116
122
|
|
|
117
123
|
deps = this.sortFeatures(deps)
|
|
@@ -119,6 +125,10 @@ export class FeatureInstallerImpl implements ServiceProvider, FeatureInstaller {
|
|
|
119
125
|
return deps
|
|
120
126
|
}
|
|
121
127
|
|
|
128
|
+
private isInGoProject() {
|
|
129
|
+
return diskUtil.detectProjectLanguage(this.cwd) === 'go'
|
|
130
|
+
}
|
|
131
|
+
|
|
122
132
|
private getFeatureDependenciesIncludingSelf(
|
|
123
133
|
featureDependency: FeatureDependency,
|
|
124
134
|
trackedFeatures: FeatureDependency[] = []
|
|
@@ -415,13 +425,27 @@ export class FeatureInstallerImpl implements ServiceProvider, FeatureInstaller {
|
|
|
415
425
|
|
|
416
426
|
didUpdateHandler?.(`Checking node dependency: ${pkg.name}`)
|
|
417
427
|
|
|
418
|
-
|
|
419
|
-
|
|
428
|
+
const goPkg = pkg as GoPackage
|
|
429
|
+
const nodePkg = pkg as NpmPackage
|
|
430
|
+
const isGoPackage = goPkg.type === 'go'
|
|
431
|
+
|
|
432
|
+
const shouldConsider =
|
|
433
|
+
(isGoPackage && this.isInGoProject()) ||
|
|
434
|
+
(!isGoPackage && !this.isInGoProject())
|
|
435
|
+
|
|
436
|
+
if (!shouldConsider) {
|
|
437
|
+
return
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
if (isGoPackage) {
|
|
441
|
+
this.packagesToInstall.push(packageName)
|
|
442
|
+
} else if (
|
|
443
|
+
nodePkg.isDev &&
|
|
420
444
|
this.devPackagesToInstall.indexOf(packageName) === -1
|
|
421
445
|
) {
|
|
422
446
|
this.devPackagesToInstall.push(packageName)
|
|
423
447
|
} else if (
|
|
424
|
-
!
|
|
448
|
+
!nodePkg.isDev &&
|
|
425
449
|
this.packagesToInstall.indexOf(packageName) === -1
|
|
426
450
|
) {
|
|
427
451
|
this.packagesToInstall.push(packageName)
|
|
@@ -120,6 +120,15 @@ export default class FeatureInstallerFactory {
|
|
|
120
120
|
|
|
121
121
|
return featureInstaller
|
|
122
122
|
}
|
|
123
|
+
|
|
124
|
+
public static setFeature<C extends FeatureCode>(code: C, feature: any) {
|
|
125
|
+
const index = this.featureCodes.indexOf(code)
|
|
126
|
+
if (index === -1) {
|
|
127
|
+
throw new Error(`Feature code "${code}" is not recognized.`)
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
this.features[index] = feature
|
|
131
|
+
}
|
|
123
132
|
}
|
|
124
133
|
|
|
125
134
|
interface InstallerWithAllFeaturesOptions {
|
|
@@ -140,7 +140,7 @@ export default class OverrideActionDecorator implements FeatureAction {
|
|
|
140
140
|
const overrides = this.optionOverrides?.[commandStr]
|
|
141
141
|
if (overrides) {
|
|
142
142
|
this.ui?.renderLine(
|
|
143
|
-
`Overrides found in package.json of ${namespace}.`
|
|
143
|
+
`Overrides found in ${this.parent.getProjectLanguage() === 'go' ? '.spruce/settings.json' : 'package.json'} of ${namespace}.`
|
|
144
144
|
)
|
|
145
145
|
this.ui?.renderObject(overrides)
|
|
146
146
|
options = {
|
|
@@ -54,9 +54,9 @@ export default class VersionResolver {
|
|
|
54
54
|
fallbackVersion: string
|
|
55
55
|
) {
|
|
56
56
|
const versions = this.loadVersions(resolvedDestination)
|
|
57
|
-
const choices = this.buildChoices(versions)
|
|
58
57
|
|
|
59
58
|
if (versions.length > 0) {
|
|
59
|
+
const choices = this.buildChoices(versions)
|
|
60
60
|
return await this.ui.prompt({
|
|
61
61
|
type: 'select',
|
|
62
62
|
label: 'Version',
|
|
@@ -67,6 +67,7 @@ export default class VersionResolver {
|
|
|
67
67
|
},
|
|
68
68
|
})
|
|
69
69
|
}
|
|
70
|
+
|
|
70
71
|
return fallbackVersion
|
|
71
72
|
}
|
|
72
73
|
|
|
@@ -11,7 +11,7 @@ export default class AgentFeature extends AbstractFeature {
|
|
|
11
11
|
public dependencies: FeatureDependency[] = [
|
|
12
12
|
{ code: 'event', isRequired: true },
|
|
13
13
|
]
|
|
14
|
-
public
|
|
14
|
+
public _packageDependencies = [
|
|
15
15
|
{
|
|
16
16
|
name: '@sprucelabs/spruce-agent-plugin',
|
|
17
17
|
},
|
|
@@ -15,7 +15,7 @@ export default class ConversationFeature extends AbstractFeature {
|
|
|
15
15
|
public dependencies: FeatureDependency[] = [
|
|
16
16
|
{ code: 'event', isRequired: true },
|
|
17
17
|
]
|
|
18
|
-
public
|
|
18
|
+
public _packageDependencies: NpmPackage[] = [
|
|
19
19
|
{
|
|
20
20
|
name: '@sprucelabs/spruce-conversation-plugin@latest',
|
|
21
21
|
isDev: false,
|
|
@@ -17,7 +17,7 @@ export default class ErrorFeature extends AbstractFeature {
|
|
|
17
17
|
{ code: 'schema', isRequired: true },
|
|
18
18
|
{ code: 'node', isRequired: true },
|
|
19
19
|
]
|
|
20
|
-
public
|
|
20
|
+
public _packageDependencies: NpmPackage[] = [
|
|
21
21
|
{
|
|
22
22
|
name: '@sprucelabs/error@latest',
|
|
23
23
|
},
|
|
@@ -20,7 +20,7 @@ export default class EventFeature extends AbstractFeature {
|
|
|
20
20
|
{ code: 'schema', isRequired: true },
|
|
21
21
|
{ code: 'permission', isRequired: true },
|
|
22
22
|
]
|
|
23
|
-
public
|
|
23
|
+
public _packageDependencies = [
|
|
24
24
|
{
|
|
25
25
|
name: '@sprucelabs/mercury-client',
|
|
26
26
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { diskUtil } from '@sprucelabs/spruce-skill-utils'
|
|
2
2
|
import { FileDescription } from '../../types/cli.types'
|
|
3
|
-
import AbstractFeature
|
|
3
|
+
import AbstractFeature from '../AbstractFeature'
|
|
4
4
|
import { FeatureCode } from '../features.types'
|
|
5
5
|
|
|
6
6
|
export default class EventContractFeature extends AbstractFeature {
|
|
@@ -8,8 +8,6 @@ export default class EventContractFeature extends AbstractFeature {
|
|
|
8
8
|
public nameReadable = 'Event Contract'
|
|
9
9
|
public description =
|
|
10
10
|
'Pull core Mercury events down and write to single, portable, dependency-free, strongly typed contract.'
|
|
11
|
-
public dependencies: FeatureDependency[] = []
|
|
12
|
-
public packageDependencies = []
|
|
13
11
|
|
|
14
12
|
public actionsDir = diskUtil.resolvePath(__dirname, 'actions')
|
|
15
13
|
public readonly fileDescriptions: FileDescription[] = []
|
|
@@ -22,7 +22,7 @@ export default class NodeFeature<
|
|
|
22
22
|
public description = ''
|
|
23
23
|
public dependencies: FeatureDependency[] = []
|
|
24
24
|
public optionsSchema = nodeFeatureOptionsSchema as S
|
|
25
|
-
public
|
|
25
|
+
public _packageDependencies = [...universalDevDependencies]
|
|
26
26
|
|
|
27
27
|
public scripts = {
|
|
28
28
|
...universalScripts,
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import { diskUtil } from '@sprucelabs/spruce-skill-utils'
|
|
2
2
|
import createTestOptionsSchema from '#spruce/schemas/spruceCli/v2020_07_22/createTestOptions.schema'
|
|
3
|
-
import AbstractFeature, {
|
|
4
|
-
FeatureDependency,
|
|
5
|
-
FeatureOptions,
|
|
6
|
-
} from '../AbstractFeature'
|
|
3
|
+
import AbstractFeature, { FeatureOptions } from '../AbstractFeature'
|
|
7
4
|
import featuresUtil from '../feature.utilities'
|
|
8
5
|
import { FeatureCode } from '../features.types'
|
|
9
6
|
import ScriptLoader from './ScriptLoader'
|
|
@@ -13,9 +10,6 @@ export default class OnboardFeature extends AbstractFeature {
|
|
|
13
10
|
public code: FeatureCode = 'onboard'
|
|
14
11
|
public nameReadable = 'Onboard'
|
|
15
12
|
public description = 'Get building your first skill already!'
|
|
16
|
-
public dependencies: FeatureDependency[] = []
|
|
17
|
-
public packageDependencies = []
|
|
18
|
-
|
|
19
13
|
public actionsDir = diskUtil.resolvePath(__dirname, 'actions')
|
|
20
14
|
|
|
21
15
|
private onboardingStore?: OnboardingStore
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { PermissionContractMap } from '@sprucelabs/mercury-types'
|
|
2
2
|
import { diskUtil, NpmPackage } from '@sprucelabs/spruce-skill-utils'
|
|
3
3
|
import AbstractFeature, {
|
|
4
|
-
FeatureDependency,
|
|
5
4
|
FeatureOptions,
|
|
6
5
|
InstallResults,
|
|
7
6
|
} from '../AbstractFeature'
|
|
@@ -12,9 +11,8 @@ export default class PermissionFeature extends AbstractFeature {
|
|
|
12
11
|
public code: FeatureCode = 'permission'
|
|
13
12
|
public nameReadable = 'permission'
|
|
14
13
|
public description = 'Manage permissions for your skill'
|
|
15
|
-
public dependencies: FeatureDependency[] = []
|
|
16
14
|
public actionsDir = diskUtil.resolvePath(__dirname, 'actions')
|
|
17
|
-
public
|
|
15
|
+
public _packageDependencies: NpmPackage[] = [
|
|
18
16
|
{
|
|
19
17
|
name: '@sprucelabs/spruce-permission-plugin@latest',
|
|
20
18
|
},
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import { diskUtil } from '@sprucelabs/spruce-skill-utils'
|
|
2
|
-
import AbstractFeature
|
|
2
|
+
import AbstractFeature from '../AbstractFeature'
|
|
3
3
|
import { FeatureCode } from '../features.types'
|
|
4
4
|
|
|
5
5
|
export default class PersonFeature extends AbstractFeature {
|
|
6
6
|
public code: FeatureCode = 'person'
|
|
7
7
|
public nameReadable = 'Person'
|
|
8
8
|
public description = 'Log in, log out, etc.'
|
|
9
|
-
public dependencies: FeatureDependency[] = []
|
|
10
|
-
public packageDependencies = []
|
|
11
|
-
|
|
12
9
|
public actionsDir = diskUtil.resolvePath(__dirname, 'actions')
|
|
13
10
|
|
|
14
11
|
public isInstalled = async () => {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { diskUtil } from '@sprucelabs/spruce-skill-utils'
|
|
2
|
-
import { NpmPackage } from '../../types/cli.types'
|
|
3
2
|
import AbstractFeature, {
|
|
4
3
|
FeatureDependency,
|
|
5
4
|
FeatureOptions,
|
|
6
5
|
InstallResults,
|
|
6
|
+
PackageDependency,
|
|
7
7
|
} from '../AbstractFeature'
|
|
8
8
|
import { FeatureCode } from '../features.types'
|
|
9
9
|
|
|
@@ -14,7 +14,7 @@ export default class SchemaFeature extends AbstractFeature {
|
|
|
14
14
|
{ code: 'skill', isRequired: false },
|
|
15
15
|
{ code: 'node', isRequired: true },
|
|
16
16
|
]
|
|
17
|
-
public
|
|
17
|
+
public _packageDependencies: PackageDependency[] = [
|
|
18
18
|
{
|
|
19
19
|
name: '@sprucelabs/schema@latest',
|
|
20
20
|
},
|
|
@@ -25,6 +25,10 @@ export default class SchemaFeature extends AbstractFeature {
|
|
|
25
25
|
{
|
|
26
26
|
name: '@sprucelabs/spruce-skill-utils',
|
|
27
27
|
},
|
|
28
|
+
{
|
|
29
|
+
type: 'go',
|
|
30
|
+
name: 'github.com/sprucelabsai-community/spruce-schema/v32/pkg/fields',
|
|
31
|
+
},
|
|
28
32
|
]
|
|
29
33
|
|
|
30
34
|
public code: FeatureCode = 'schema'
|
|
@@ -94,6 +98,8 @@ export default class SchemaFeature extends AbstractFeature {
|
|
|
94
98
|
return {}
|
|
95
99
|
}
|
|
96
100
|
|
|
101
|
+
this.Service('settings').markAsInstalled(this.code)
|
|
102
|
+
|
|
97
103
|
const files = await this.writePlugin()
|
|
98
104
|
|
|
99
105
|
return {
|
|
@@ -14,9 +14,6 @@ import { FeatureActionResponse } from '../../features.types'
|
|
|
14
14
|
import schemaDiskUtil from '../utilities/schemaDisk.utility'
|
|
15
15
|
import ValueTypeBuilder from '../ValueTypeBuilder'
|
|
16
16
|
|
|
17
|
-
type OptionsSchema =
|
|
18
|
-
SpruceSchemas.SpruceCli.v2020_07_22.SyncSchemasOptionsSchema
|
|
19
|
-
type Options = SpruceSchemas.SpruceCli.v2020_07_22.SyncSchemasOptions
|
|
20
17
|
export default class SyncAction extends AbstractAction<OptionsSchema> {
|
|
21
18
|
public optionsSchema = syncSchemasActionSchema
|
|
22
19
|
public commandAliases = ['sync.schemas']
|
|
@@ -24,12 +21,10 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
|
|
|
24
21
|
|
|
25
22
|
private readonly schemaWriter = this.Writer('schema')
|
|
26
23
|
private readonly schemaStore = this.Store('schema')
|
|
24
|
+
private readonly skillStore = this.Store('skill')
|
|
27
25
|
|
|
28
26
|
public async execute(options: Options): Promise<FeatureActionResponse> {
|
|
29
27
|
const normalizedOptions = this.validateAndNormalizeOptions(options)
|
|
30
|
-
const isInCoreSchemasModule =
|
|
31
|
-
this.Service('pkg').get('name') ===
|
|
32
|
-
'@sprucelabs/spruce-core-schemas'
|
|
33
28
|
|
|
34
29
|
let {
|
|
35
30
|
schemaTypesDestinationDirOrFile,
|
|
@@ -39,7 +34,7 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
|
|
|
39
34
|
shouldEnableVersioning,
|
|
40
35
|
globalSchemaNamespace,
|
|
41
36
|
shouldFetchRemoteSchemas,
|
|
42
|
-
shouldGenerateCoreSchemaTypes
|
|
37
|
+
shouldGenerateCoreSchemaTypes,
|
|
43
38
|
shouldFetchLocalSchemas,
|
|
44
39
|
generateFieldTypes,
|
|
45
40
|
generateStandaloneTypesFile,
|
|
@@ -54,8 +49,7 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
|
|
|
54
49
|
|
|
55
50
|
this.ui.startLoading('Loading details about your skill... 🧐')
|
|
56
51
|
|
|
57
|
-
let localNamespace =
|
|
58
|
-
await this.Store('skill').loadCurrentSkillsNamespace()
|
|
52
|
+
let localNamespace = await this.skillStore.loadCurrentSkillsNamespace()
|
|
59
53
|
let shouldImportCoreSchemas = true
|
|
60
54
|
|
|
61
55
|
if (shouldGenerateCoreSchemaTypes) {
|
|
@@ -79,6 +73,7 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
|
|
|
79
73
|
generateStandaloneTypesFile,
|
|
80
74
|
schemaTypesDestinationDirOrFile,
|
|
81
75
|
fieldTypesDestinationDir,
|
|
76
|
+
language: this.getProjectLanguage(),
|
|
82
77
|
})
|
|
83
78
|
|
|
84
79
|
this.ui.startLoading('Generating field types...')
|
|
@@ -125,7 +120,6 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
|
|
|
125
120
|
|
|
126
121
|
if (deleteOrphanedSchemas) {
|
|
127
122
|
this.ui.startLoading('Identifying orphaned schemas...')
|
|
128
|
-
|
|
129
123
|
await schemaDiskUtil.deleteOrphanedSchemas(
|
|
130
124
|
resolvedSchemaTypesDestinationDirOrFile,
|
|
131
125
|
schemaTemplateItems
|
|
@@ -140,20 +134,30 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
|
|
|
140
134
|
let valueTypes: ValueTypes | undefined
|
|
141
135
|
|
|
142
136
|
try {
|
|
143
|
-
valueTypes =
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
137
|
+
valueTypes = this.isInGoProject()
|
|
138
|
+
? undefined
|
|
139
|
+
: await this.generateValueTypes({
|
|
140
|
+
resolvedDestination: resolvedFieldTypesDestination,
|
|
141
|
+
fieldTemplateItems,
|
|
142
|
+
schemaTemplateItems,
|
|
143
|
+
globalSchemaNamespace:
|
|
144
|
+
globalSchemaNamespace ?? undefined,
|
|
145
|
+
})
|
|
149
146
|
} catch (err: any) {
|
|
150
147
|
schemaErrors.push(err)
|
|
151
148
|
}
|
|
152
149
|
|
|
153
|
-
if (valueTypes) {
|
|
150
|
+
if (valueTypes || this.isInGoProject()) {
|
|
154
151
|
try {
|
|
155
152
|
this.ui.startLoading('Determining what changed... ⚡️')
|
|
156
153
|
|
|
154
|
+
let goModuleNameAndPath: string | undefined = undefined
|
|
155
|
+
if (this.isInGoProject()) {
|
|
156
|
+
goModuleNameAndPath = this.skillStore.getGoModuleName({
|
|
157
|
+
shouldIncludePathFromCwd: true,
|
|
158
|
+
})
|
|
159
|
+
}
|
|
160
|
+
|
|
157
161
|
typeResults = await this.schemaWriter.writeSchemasAndTypes(
|
|
158
162
|
resolvedSchemaTypesDestination,
|
|
159
163
|
{
|
|
@@ -162,11 +166,13 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
|
|
|
162
166
|
schemaTemplateItems,
|
|
163
167
|
shouldImportCoreSchemas,
|
|
164
168
|
valueTypes,
|
|
169
|
+
goModuleNameAndPath,
|
|
170
|
+
language: this.getProjectLanguage(),
|
|
165
171
|
globalSchemaNamespace:
|
|
166
172
|
globalSchemaNamespace ?? undefined,
|
|
167
|
-
typesTemplate:
|
|
168
|
-
|
|
169
|
-
|
|
173
|
+
typesTemplate: this.resolveTypesTemplate(
|
|
174
|
+
generateStandaloneTypesFile
|
|
175
|
+
),
|
|
170
176
|
}
|
|
171
177
|
)
|
|
172
178
|
} catch (err: any) {
|
|
@@ -176,7 +182,10 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
|
|
|
176
182
|
}
|
|
177
183
|
|
|
178
184
|
const p = resolvedSchemaTypesDestination
|
|
179
|
-
diskUtil.
|
|
185
|
+
const dir = diskUtil.isDir(p) ? p : pathUtil.dirname(p)
|
|
186
|
+
if (diskUtil.doesDirExist(dir)) {
|
|
187
|
+
diskUtil.deleteEmptyDirs(dir)
|
|
188
|
+
}
|
|
180
189
|
|
|
181
190
|
this.ui.stopLoading()
|
|
182
191
|
|
|
@@ -192,6 +201,18 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
|
|
|
192
201
|
})
|
|
193
202
|
}
|
|
194
203
|
|
|
204
|
+
private resolveTypesTemplate(
|
|
205
|
+
generateStandaloneTypesFile: boolean
|
|
206
|
+
): string | undefined {
|
|
207
|
+
if (this.isInGoProject()) {
|
|
208
|
+
return 'schema/schemas.go.hbs'
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
return generateStandaloneTypesFile
|
|
212
|
+
? 'schema/core.schemas.types.ts.hbs'
|
|
213
|
+
: undefined
|
|
214
|
+
}
|
|
215
|
+
|
|
195
216
|
private async optionallyInstallRemoteModules(
|
|
196
217
|
schemaTemplateItems: SchemaTemplateItem[],
|
|
197
218
|
forceInstall?: boolean
|
|
@@ -202,6 +223,10 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
|
|
|
202
223
|
.filter((i) => !!i)
|
|
203
224
|
) as string[]
|
|
204
225
|
|
|
226
|
+
if (this.isInGoProject()) {
|
|
227
|
+
return
|
|
228
|
+
}
|
|
229
|
+
|
|
205
230
|
const notInstalled: string[] = []
|
|
206
231
|
|
|
207
232
|
const pkg = this.Service('pkg')
|
|
@@ -287,11 +312,12 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
|
|
|
287
312
|
},
|
|
288
313
|
})
|
|
289
314
|
|
|
290
|
-
const hashSpruceDestination =
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
315
|
+
const hashSpruceDestination = this.isInGoProject()
|
|
316
|
+
? this.cwd
|
|
317
|
+
: resolvedSchemaTypesDestinationDirOrFile.replace(
|
|
318
|
+
diskUtil.resolveHashSprucePath(this.cwd),
|
|
319
|
+
'#spruce'
|
|
320
|
+
)
|
|
295
321
|
|
|
296
322
|
let total = 0
|
|
297
323
|
let totalNamespaces = 0
|
|
@@ -317,11 +343,23 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
|
|
|
317
343
|
return { schemaTemplateItems, schemaErrors }
|
|
318
344
|
}
|
|
319
345
|
|
|
346
|
+
private isInGoProject() {
|
|
347
|
+
return this.getProjectLanguage() === 'go'
|
|
348
|
+
}
|
|
349
|
+
|
|
320
350
|
private async generateFieldTemplateItems(options: {
|
|
321
351
|
addonsLookupDir: string
|
|
322
352
|
shouldGenerateFieldTypes: boolean
|
|
323
353
|
resolvedFieldTypesDestination: string
|
|
324
354
|
}) {
|
|
355
|
+
if (this.isInGoProject()) {
|
|
356
|
+
return {
|
|
357
|
+
generateFieldFiles: [],
|
|
358
|
+
fieldTemplateItems: [],
|
|
359
|
+
fieldErrors: [],
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
325
363
|
const {
|
|
326
364
|
addonsLookupDir,
|
|
327
365
|
shouldGenerateFieldTypes: generateFieldTypes,
|
|
@@ -358,3 +396,7 @@ export default class SyncAction extends AbstractAction<OptionsSchema> {
|
|
|
358
396
|
return builder.generateValueTypes(options)
|
|
359
397
|
}
|
|
360
398
|
}
|
|
399
|
+
|
|
400
|
+
type OptionsSchema =
|
|
401
|
+
SpruceSchemas.SpruceCli.v2020_07_22.SyncSchemasOptionsSchema
|
|
402
|
+
type Options = SpruceSchemas.SpruceCli.v2020_07_22.SyncSchemasOptions
|