@sprucelabs/spruce-cli 18.0.0 → 18.1.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 +10 -0
- package/build/__tests__/behavioral/EnablingAndDisablingCache.test.js +1 -1
- package/build/__tests__/behavioral/EnablingAndDisablingCache.test.js.map +1 -1
- package/build/__tests__/behavioral/RememberingUpgradeSelections.test.js +1 -1
- package/build/__tests__/behavioral/RememberingUpgradeSelections.test.js.map +1 -1
- package/build/__tests__/behavioral/SettingUpSchemasForModuleDistribution.test.js +4 -4
- package/build/__tests__/behavioral/SettingUpSchemasForModuleDistribution.test.js.map +1 -1
- package/build/__tests__/behavioral/WatchingSkillViews.test.js +3 -3
- package/build/__tests__/behavioral/WatchingSkillViews.test.js.map +1 -1
- package/build/__tests__/behavioral/errors/SettingUpErrors.test.js +1 -1
- package/build/__tests__/behavioral/errors/SettingUpErrors.test.js.map +1 -1
- package/build/__tests__/behavioral/events/CreatingAListener.test.d.ts +2 -0
- package/build/__tests__/behavioral/events/CreatingAListener.test.js +118 -59
- package/build/__tests__/behavioral/events/CreatingAListener.test.js.map +1 -1
- package/build/__tests__/behavioral/events/EverythingInstalledInstaller.d.ts +17 -0
- package/build/__tests__/behavioral/events/EverythingInstalledInstaller.js +137 -0
- package/build/__tests__/behavioral/events/EverythingInstalledInstaller.js.map +1 -0
- package/build/__tests__/behavioral/onboard/StartingOnboarding.test.js +46 -45
- package/build/__tests__/behavioral/onboard/StartingOnboarding.test.js.map +1 -1
- package/build/__tests__/behavioral/tests/CreatingATest.test.js +1 -1
- package/build/__tests__/behavioral/tests/CreatingATest.test.js.map +1 -1
- package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.js +4 -4
- package/build/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.js.map +1 -1
- package/build/__tests__/behavioral/upgrading/UpdatingDependencies2.test.js +2 -2
- package/build/__tests__/behavioral/upgrading/UpdatingDependencies2.test.js.map +1 -1
- package/build/__tests__/behavioral/upgrading/UpgradingANodeModule.test.js +2 -2
- package/build/__tests__/behavioral/upgrading/UpgradingANodeModule.test.js.map +1 -1
- package/build/__tests__/behavioral/upgrading/UpgradingASkill5.test.js +2 -2
- package/build/__tests__/behavioral/upgrading/UpgradingASkill5.test.js.map +1 -1
- package/build/__tests__/behavioral/upgrading/UpgradingWithListeners.test.js +2 -2
- package/build/__tests__/behavioral/upgrading/UpgradingWithListeners.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 +1 -1
- package/build/__tests__/behavioral/views/CreatingATheme.test.js.map +1 -1
- package/build/__tests__/behavioral/watchers/WatchingForChanges.test.d.ts +3 -3
- package/build/__tests__/behavioral/watchers/WatchingForChanges.test.js +153 -156
- package/build/__tests__/behavioral/watchers/WatchingForChanges.test.js.map +1 -1
- package/build/__tests__/implementation/ActionExecuter.test.js +2 -2
- package/build/__tests__/implementation/ActionExecuter.test.js.map +1 -1
- package/build/__tests__/implementation/ActionExecuter2.test.js +1 -1
- package/build/__tests__/implementation/ActionExecuter2.test.js.map +1 -1
- package/build/__tests__/implementation/ActionExecuter4.test.js +1 -1
- package/build/__tests__/implementation/ActionExecuter4.test.js.map +1 -1
- package/build/__tests__/implementation/FeatureInstaller.test.js +8 -4
- package/build/__tests__/implementation/FeatureInstaller.test.js.map +1 -1
- package/build/__tests__/implementation/GlobalEmitter.d.ts +1 -1
- package/build/__tests__/implementation/GlobalEmitter.js +9 -10
- package/build/__tests__/implementation/GlobalEmitter.js.map +1 -1
- package/build/__tests__/implementation/SettingUpANodeModule.test.js +1 -1
- package/build/__tests__/implementation/SettingUpANodeModule.test.js.map +1 -1
- package/build/__tests__/implementation/SkillStore.test.d.ts +3 -1
- package/build/__tests__/implementation/SkillStore.test.js +67 -50
- package/build/__tests__/implementation/SkillStore.test.js.map +1 -1
- package/build/__tests__/implementation/StoreFeature.test.js +1 -1
- package/build/__tests__/implementation/StoreFeature.test.js.map +1 -1
- package/build/cli.js +3 -3
- package/build/cli.js.map +1 -1
- package/build/features/AbstractAction.d.ts +2 -2
- package/build/features/AbstractAction.js.map +1 -1
- package/build/features/AbstractFeature.d.ts +22 -22
- package/build/features/AbstractFeature.js.map +1 -1
- package/build/features/ActionExecuter.d.ts +8 -8
- package/build/features/ActionExecuter.js.map +1 -1
- package/build/features/FeatureInstaller.d.ts +15 -2
- package/build/features/FeatureInstaller.js +36 -36
- package/build/features/FeatureInstaller.js.map +1 -1
- package/build/features/FeatureInstallerFactory.d.ts +12 -10
- package/build/features/FeatureInstallerFactory.js +2 -2
- package/build/features/FeatureInstallerFactory.js.map +1 -1
- package/build/features/OverrideActionDecorator.js +4 -5
- package/build/features/OverrideActionDecorator.js.map +1 -1
- package/build/features/event/actions/ListenAction.js.map +1 -1
- package/build/features/event/actions/SetRemoteAction.d.ts +1 -0
- package/build/features/event/actions/SetRemoteAction.js +2 -1
- package/build/features/event/actions/SetRemoteAction.js.map +1 -1
- package/build/features/event/actions/SyncListenersAction.js.map +1 -1
- package/build/features/node/NodeFeature.js.map +1 -1
- package/build/features/skill/SkillFeature.js.map +1 -1
- package/build/features/skill/stores/SkillStore.d.ts +4 -1
- package/build/features/skill/stores/SkillStore.js +127 -100
- package/build/features/skill/stores/SkillStore.js.map +1 -1
- package/build/features/watch/WatchFeature.js +1 -1
- package/build/features/watch/WatchFeature.js.map +1 -1
- package/build/interfaces/SpyInterface.d.ts +2 -0
- package/build/interfaces/SpyInterface.js +16 -4
- package/build/interfaces/SpyInterface.js.map +1 -1
- package/build/stores/AbstractStore.d.ts +9 -7
- package/build/stores/AbstractStore.js.map +1 -1
- package/build/stores/StoreFactory.d.ts +19 -13
- package/build/stores/StoreFactory.js +15 -13
- package/build/stores/StoreFactory.js.map +1 -1
- package/build/tests/AbstractCliTest.d.ts +9 -6
- package/build/tests/AbstractCliTest.js +53 -45
- package/build/tests/AbstractCliTest.js.map +1 -1
- package/build/tests/AbstractSchemaTest.js +18 -20
- package/build/tests/AbstractSchemaTest.js.map +1 -1
- package/build/utilities/action.utility.js +3 -1
- package/build/utilities/action.utility.js.map +1 -1
- package/node_modules/@typescript-eslint/parser/package.json +5 -5
- package/node_modules/@typescript-eslint/scope-manager/package.json +5 -5
- package/node_modules/@typescript-eslint/types/package.json +2 -2
- package/node_modules/@typescript-eslint/typescript-estree/package.json +5 -5
- package/node_modules/@typescript-eslint/visitor-keys/package.json +3 -3
- package/package.json +32 -90
- package/src/__tests__/behavioral/EnablingAndDisablingCache.test.ts +1 -1
- package/src/__tests__/behavioral/RememberingUpgradeSelections.test.ts +1 -1
- package/src/__tests__/behavioral/SettingUpSchemasForModuleDistribution.test.ts +4 -4
- package/src/__tests__/behavioral/WatchingSkillViews.test.ts +3 -3
- package/src/__tests__/behavioral/errors/SettingUpErrors.test.ts +1 -1
- package/src/__tests__/behavioral/events/CreatingAListener.test.ts +41 -14
- package/src/__tests__/behavioral/events/EverythingInstalledInstaller.ts +46 -0
- package/src/__tests__/behavioral/onboard/StartingOnboarding.test.ts +10 -5
- package/src/__tests__/behavioral/tests/CreatingATest.test.ts +1 -1
- package/src/__tests__/behavioral/tests/SelectingAnAbstractTestClass.test.ts +4 -4
- package/src/__tests__/behavioral/upgrading/UpdatingDependencies2.test.ts +2 -2
- package/src/__tests__/behavioral/upgrading/UpgradingANodeModule.test.ts +2 -2
- package/src/__tests__/behavioral/upgrading/UpgradingASkill5.test.ts +2 -2
- package/src/__tests__/behavioral/upgrading/UpgradingWithListeners.test.ts +2 -2
- package/src/__tests__/behavioral/views/CreatingASkillView.test.ts +1 -1
- package/src/__tests__/behavioral/views/CreatingATheme.test.ts +1 -1
- package/src/__tests__/behavioral/watchers/WatchingForChanges.test.ts +35 -35
- package/src/__tests__/implementation/ActionExecuter.test.ts +2 -2
- package/src/__tests__/implementation/ActionExecuter2.test.ts +1 -1
- package/src/__tests__/implementation/ActionExecuter4.test.ts +1 -1
- package/src/__tests__/implementation/FeatureInstaller.test.ts +8 -1
- package/src/__tests__/implementation/GlobalEmitter.ts +2 -4
- package/src/__tests__/implementation/SettingUpANodeModule.test.ts +1 -1
- package/src/__tests__/implementation/SkillStore.test.ts +23 -24
- package/src/__tests__/implementation/StoreFeature.test.ts +1 -1
- package/src/cli.ts +7 -3
- package/src/features/AbstractAction.ts +3 -3
- package/src/features/AbstractFeature.ts +26 -26
- package/src/features/ActionExecuter.ts +9 -9
- package/src/features/FeatureInstaller.ts +32 -12
- package/src/features/FeatureInstallerFactory.ts +17 -13
- package/src/features/OverrideActionDecorator.ts +2 -5
- package/src/features/event/actions/ListenAction.ts +1 -0
- package/src/features/event/actions/SetRemoteAction.ts +2 -1
- package/src/features/event/actions/SyncListenersAction.ts +0 -1
- package/src/features/node/NodeFeature.ts +3 -1
- package/src/features/skill/SkillFeature.ts +3 -3
- package/src/features/skill/stores/SkillStore.ts +18 -11
- package/src/features/watch/WatchFeature.ts +1 -1
- package/src/interfaces/SpyInterface.ts +10 -0
- package/src/stores/AbstractStore.ts +14 -8
- package/src/stores/StoreFactory.ts +56 -44
- package/src/tests/AbstractCliTest.ts +53 -45
- package/src/tests/AbstractSchemaTest.ts +1 -3
- package/src/utilities/action.utility.ts +3 -1
- package/.DS_Store +0 -0
- package/.env +0 -25
- package/.eslintcache +0 -1
- package/build/.spruce/tmp/cached-skills.json +0 -3
- package/junit.xml +0 -7
- package/src/.DS_Store +0 -0
- package/src/.spruce/tmp/cached-skills.json +0 -3
- package/yarn-error.log +0 -12174
|
@@ -2,7 +2,7 @@ import { Schema, SchemaValues } from '@sprucelabs/schema';
|
|
|
2
2
|
import { Templates } from '@sprucelabs/spruce-templates';
|
|
3
3
|
import { GlobalEmitter } from '../GlobalEmitter';
|
|
4
4
|
import ServiceFactory, { Service, ServiceProvider, ServiceMap } from '../services/ServiceFactory';
|
|
5
|
-
import StoreFactory, { StoreCode,
|
|
5
|
+
import StoreFactory, { StoreCode, CreateStoreOptions, StoreMap } from '../stores/StoreFactory';
|
|
6
6
|
import { ApiClient, ApiClientFactory, ApiClientFactoryOptions } from '../types/apiClient.types';
|
|
7
7
|
import { NpmPackage, GeneratedFile, FileDescription } from '../types/cli.types';
|
|
8
8
|
import { GraphicsInterface } from '../types/cli.types';
|
|
@@ -12,26 +12,6 @@ import ActionExecuter from './ActionExecuter';
|
|
|
12
12
|
import ActionFactory from './ActionFactory';
|
|
13
13
|
import FeatureInstaller from './FeatureInstaller';
|
|
14
14
|
import { FeatureCode } from './features.types';
|
|
15
|
-
export interface InstallResults {
|
|
16
|
-
files?: GeneratedFile[];
|
|
17
|
-
cwd?: string;
|
|
18
|
-
}
|
|
19
|
-
export interface FeatureDependency {
|
|
20
|
-
isRequired: boolean;
|
|
21
|
-
code: FeatureCode;
|
|
22
|
-
}
|
|
23
|
-
export interface FeatureOptions {
|
|
24
|
-
cwd: string;
|
|
25
|
-
serviceFactory: ServiceFactory;
|
|
26
|
-
templates: Templates;
|
|
27
|
-
storeFactory: StoreFactory;
|
|
28
|
-
actionFactory?: ActionFactory;
|
|
29
|
-
featureInstaller: FeatureInstaller;
|
|
30
|
-
ui: GraphicsInterface;
|
|
31
|
-
emitter: GlobalEmitter;
|
|
32
|
-
apiClientFactory: ApiClientFactory;
|
|
33
|
-
actionExecuter: ActionExecuter;
|
|
34
|
-
}
|
|
35
15
|
export default abstract class AbstractFeature<S extends Schema | undefined = Schema | undefined> implements ServiceProvider {
|
|
36
16
|
abstract description: string;
|
|
37
17
|
readonly dependencies: FeatureDependency[];
|
|
@@ -64,6 +44,26 @@ export default abstract class AbstractFeature<S extends Schema | undefined = Sch
|
|
|
64
44
|
Writer<C extends WriterCode>(code: C, options?: Partial<WriterOptions>): WriterMap[C];
|
|
65
45
|
getFeature<Code extends FeatureCode>(code: Code): import("./features.types").FeatureMap[Code];
|
|
66
46
|
getAvailableActionCodes(): Promise<string[]>;
|
|
67
|
-
Store<C extends StoreCode>(code: C, options?:
|
|
47
|
+
Store<C extends StoreCode>(code: C, options?: CreateStoreOptions<C>): StoreMap[C];
|
|
68
48
|
protected connectToApi(options?: ApiClientFactoryOptions): Promise<ApiClient>;
|
|
69
49
|
}
|
|
50
|
+
export interface InstallResults {
|
|
51
|
+
files?: GeneratedFile[];
|
|
52
|
+
cwd?: string;
|
|
53
|
+
}
|
|
54
|
+
export interface FeatureDependency {
|
|
55
|
+
isRequired: boolean;
|
|
56
|
+
code: FeatureCode;
|
|
57
|
+
}
|
|
58
|
+
export interface FeatureOptions {
|
|
59
|
+
cwd: string;
|
|
60
|
+
serviceFactory: ServiceFactory;
|
|
61
|
+
templates: Templates;
|
|
62
|
+
storeFactory: StoreFactory;
|
|
63
|
+
actionFactory?: ActionFactory;
|
|
64
|
+
featureInstaller: FeatureInstaller;
|
|
65
|
+
ui: GraphicsInterface;
|
|
66
|
+
emitter: GlobalEmitter;
|
|
67
|
+
apiClientFactory: ApiClientFactory;
|
|
68
|
+
actionExecuter: ActionExecuter;
|
|
69
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AbstractFeature.js","names":["AbstractFeature","options","cwd","serviceFactory","templates","actionFactory","storeFactory","writerFactory","WriterFactory","ui","settings","Service","linter","emitter","featureInstaller","apiClientFactory","actionExecuter","featureCode","actionCode","Action","_options","type","code","Writer","fileDescriptions","getFeature","actionsDir","actionCodes","globby","pathUtil","join","matches","codes","match","generatedCode","featuresUtil","filePathToActionCode","push","Store"],"sources":["../../src/features/AbstractFeature.ts"],"sourcesContent":["import pathUtil from 'path'\nimport { Schema, SchemaValues } from '@sprucelabs/schema'\nimport { Templates } from '@sprucelabs/spruce-templates'\nimport globby from 'globby'\nimport { GlobalEmitter } from '../GlobalEmitter'\nimport ServiceFactory, {\n\tService,\n\tServiceProvider,\n\tServiceMap,\n} from '../services/ServiceFactory'\nimport StoreFactory, {\n\tStoreCode,\n\
|
|
1
|
+
{"version":3,"file":"AbstractFeature.js","names":["AbstractFeature","options","cwd","serviceFactory","templates","actionFactory","storeFactory","writerFactory","WriterFactory","ui","settings","Service","linter","emitter","featureInstaller","apiClientFactory","actionExecuter","featureCode","actionCode","Action","_options","type","code","Writer","fileDescriptions","getFeature","actionsDir","actionCodes","globby","pathUtil","join","matches","codes","match","generatedCode","featuresUtil","filePathToActionCode","push","Store"],"sources":["../../src/features/AbstractFeature.ts"],"sourcesContent":["import pathUtil from 'path'\nimport { Schema, SchemaValues } from '@sprucelabs/schema'\nimport { Templates } from '@sprucelabs/spruce-templates'\nimport globby from 'globby'\nimport { GlobalEmitter } from '../GlobalEmitter'\nimport ServiceFactory, {\n\tService,\n\tServiceProvider,\n\tServiceMap,\n} from '../services/ServiceFactory'\nimport StoreFactory, {\n\tStoreCode,\n\tCreateStoreOptions,\n\tStoreMap,\n} from '../stores/StoreFactory'\nimport {\n\tApiClient,\n\tApiClientFactory,\n\tApiClientFactoryOptions,\n} from '../types/apiClient.types'\nimport { NpmPackage, GeneratedFile, FileDescription } from '../types/cli.types'\nimport { GraphicsInterface } from '../types/cli.types'\nimport { WriterOptions } from '../writers/AbstractWriter'\nimport WriterFactory, { WriterCode, WriterMap } from '../writers/WriterFactory'\nimport ActionExecuter from './ActionExecuter'\nimport ActionFactory from './ActionFactory'\nimport featuresUtil from './feature.utilities'\nimport FeatureInstaller from './FeatureInstaller'\nimport { FeatureCode } from './features.types'\n\nexport default abstract class AbstractFeature<\n\tS extends Schema | undefined = Schema | undefined\n> implements ServiceProvider\n{\n\tpublic abstract description: string\n\tpublic readonly dependencies: FeatureDependency[] = []\n\tpublic readonly packageDependencies: NpmPackage[] = []\n\tpublic readonly optionsSchema?: S\n\tpublic readonly fileDescriptions: FileDescription[] = []\n\n\tpublic isInstalled?(): Promise<boolean>\n\n\tpublic abstract readonly code: FeatureCode\n\tpublic abstract readonly nameReadable: string\n\tpublic readonly installOrderWeight: number = 0\n\n\tpublic cwd: string\n\tpublic scripts: Record<string, any> = {}\n\tpublic actionsDir: string | undefined\n\tprotected actionFactory?: ActionFactory\n\tprotected templates: Templates\n\tprotected emitter: GlobalEmitter\n\tprotected featureInstaller: FeatureInstaller\n\tprotected ui: GraphicsInterface\n\n\tprivate serviceFactory: ServiceFactory\n\tprivate storeFactory: StoreFactory\n\tprivate writerFactory: WriterFactory\n\tprivate apiClientFactory: ApiClientFactory\n\tprivate actionExecuter: ActionExecuter\n\tprivate actionCodes?: string[]\n\n\tpublic constructor(options: FeatureOptions) {\n\t\tthis.cwd = options.cwd\n\t\tthis.serviceFactory = options.serviceFactory\n\t\tthis.templates = options.templates\n\t\tthis.actionFactory = options.actionFactory\n\t\tthis.storeFactory = options.storeFactory\n\t\tthis.writerFactory = new WriterFactory({\n\t\t\ttemplates: this.templates,\n\t\t\tui: options.ui,\n\t\t\tsettings: this.Service('settings'),\n\t\t\tlinter: this.Service('lint'),\n\t\t})\n\t\tthis.emitter = options.emitter\n\t\tthis.featureInstaller = options.featureInstaller\n\t\tthis.ui = options.ui\n\t\tthis.apiClientFactory = options.apiClientFactory\n\t\tthis.actionExecuter = options.actionExecuter\n\t}\n\n\tprotected Action(featureCode: string, actionCode: string) {\n\t\treturn this.actionExecuter.Action(featureCode as any, actionCode)\n\t}\n\n\tpublic async beforePackageInstall(\n\t\t_options: S extends Schema ? SchemaValues<S> : undefined\n\t): Promise<InstallResults> {\n\t\treturn {}\n\t}\n\n\tpublic async afterPackageInstall(\n\t\t_options: S extends Schema ? SchemaValues<S> : undefined\n\t): Promise<InstallResults> {\n\t\treturn {}\n\t}\n\n\tpublic Service<S extends Service>(type: S, cwd?: string): ServiceMap[S] {\n\t\treturn this.serviceFactory.Service(cwd ?? this.cwd, type)\n\t}\n\n\tpublic Writer<C extends WriterCode>(\n\t\tcode: C,\n\t\toptions?: Partial<WriterOptions>\n\t): WriterMap[C] {\n\t\treturn this.writerFactory.Writer(code, {\n\t\t\tfileDescriptions: this.fileDescriptions,\n\t\t\tlinter: this.Service('lint'),\n\t\t\t...options,\n\t\t})\n\t}\n\n\tpublic getFeature<Code extends FeatureCode>(code: Code) {\n\t\treturn this.featureInstaller.getFeature(code)\n\t}\n\n\tpublic async getAvailableActionCodes(): Promise<string[]> {\n\t\tif (!this.actionsDir) {\n\t\t\treturn []\n\t\t}\n\n\t\tif (!this.actionCodes) {\n\t\t\tconst matches: string[] = await globby(\n\t\t\t\tpathUtil.join(this.actionsDir, '**/*Action.js')\n\t\t\t)\n\n\t\t\tconst codes: string[] = []\n\n\t\t\tfor (const match of matches) {\n\t\t\t\tconst generatedCode = featuresUtil.filePathToActionCode(match)\n\t\t\t\tcodes.push(generatedCode)\n\t\t\t}\n\n\t\t\tthis.actionCodes = codes\n\t\t}\n\n\t\treturn this.actionCodes\n\t}\n\n\tpublic Store<C extends StoreCode>(\n\t\tcode: C,\n\t\toptions?: CreateStoreOptions<C>\n\t): StoreMap[C] {\n\t\treturn this.storeFactory.Store(code, { cwd: this.cwd, ...(options as any) })\n\t}\n\n\tprotected async connectToApi(\n\t\toptions?: ApiClientFactoryOptions\n\t): Promise<ApiClient> {\n\t\treturn this.apiClientFactory(options)\n\t}\n}\n\nexport interface InstallResults {\n\tfiles?: GeneratedFile[]\n\tcwd?: string\n}\n\nexport interface FeatureDependency {\n\tisRequired: boolean\n\tcode: FeatureCode\n}\n\nexport interface FeatureOptions {\n\tcwd: string\n\tserviceFactory: ServiceFactory\n\ttemplates: Templates\n\tstoreFactory: StoreFactory\n\tactionFactory?: ActionFactory\n\tfeatureInstaller: FeatureInstaller\n\tui: GraphicsInterface\n\temitter: GlobalEmitter\n\tapiClientFactory: ApiClientFactory\n\tactionExecuter: ActionExecuter\n}\n"],"mappings":"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"}
|
|
@@ -3,14 +3,6 @@ import { GraphicsInterface } from '../types/cli.types';
|
|
|
3
3
|
import ActionFactory from './ActionFactory';
|
|
4
4
|
import FeatureInstaller from './FeatureInstaller';
|
|
5
5
|
import { FeatureCode, FeatureAction } from './features.types';
|
|
6
|
-
export interface ActionExecuterOptions {
|
|
7
|
-
ui: GraphicsInterface;
|
|
8
|
-
emitter: GlobalEmitter;
|
|
9
|
-
actionFactory: ActionFactory;
|
|
10
|
-
featureInstallerFactory: () => FeatureInstaller;
|
|
11
|
-
shouldAutoHandleDependencies?: boolean;
|
|
12
|
-
shouldThrowOnListenerError?: boolean;
|
|
13
|
-
}
|
|
14
6
|
export default class ActionExecuter {
|
|
15
7
|
private emitter;
|
|
16
8
|
private ui;
|
|
@@ -23,3 +15,11 @@ export default class ActionExecuter {
|
|
|
23
15
|
private execute;
|
|
24
16
|
Action<F extends FeatureCode>(featureCode: F, actionCode: string): FeatureAction;
|
|
25
17
|
}
|
|
18
|
+
export interface ActionExecuterOptions {
|
|
19
|
+
ui: GraphicsInterface;
|
|
20
|
+
emitter: GlobalEmitter;
|
|
21
|
+
actionFactory: ActionFactory;
|
|
22
|
+
featureInstallerFactory: () => FeatureInstaller;
|
|
23
|
+
shouldAutoHandleDependencies?: boolean;
|
|
24
|
+
shouldThrowOnListenerError?: boolean;
|
|
25
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionExecuter.js","names":["ActionExecuter","options","featureInstallerFactory","emitter","ui","actionFactory","shouldAutoHandleDependencies","shouldThrowOnListenerError","featureCode","actionCode","action","originalExecute","actionOptions","installer","getFeatureInstaller","isInstalled","SpruceError","code","friendlyMessage","emit","willExecuteResults","eventResponseUtil","getAllResponsePayloadsAndErrors","willExecutePayloads","payloads","errors","length","actionUtil","assertNoErrorsInResponse","feature","getFeature","asker","ActionOptionAsker","featureInstaller","installOrMarkAsSkippedMissingDependencies","response","askAboutMissingFeatureOptionsIfFeatureIsNotInstalled","installOptions","askAboutMissingActionOptions","answers","installOurFeature","ourFeatureResults","merge","executeResults","results","didExecuteResults","didExecuteErrors","mergeActionResults","Action","actionExecuter","execute","bind"],"sources":["../../src/features/ActionExecuter.ts"],"sourcesContent":["import { eventResponseUtil } from '@sprucelabs/spruce-event-utils'\nimport merge from 'lodash/merge'\nimport SpruceError from '../errors/SpruceError'\nimport { GlobalEmitter } from '../GlobalEmitter'\nimport { GraphicsInterface } from '../types/cli.types'\nimport actionUtil from '../utilities/action.utility'\nimport ActionFactory from './ActionFactory'\nimport ActionOptionAsker from './ActionQuestionAsker'\nimport FeatureInstaller from './FeatureInstaller'\nimport {\n\tFeatureCode,\n\tFeatureInstallResponse,\n\tFeatureAction,\n\tFeatureActionResponse,\n} from './features.types'\n\nexport interface ActionExecuterOptions {\n\tui: GraphicsInterface\n\temitter: GlobalEmitter\n\tactionFactory: ActionFactory\n\tfeatureInstallerFactory: () => FeatureInstaller\n\tshouldAutoHandleDependencies?: boolean\n\tshouldThrowOnListenerError?: boolean\n}\n\nexport default class ActionExecuter {\n\tprivate emitter: GlobalEmitter\n\tprivate ui: GraphicsInterface\n\tprivate actionFactory: ActionFactory\n\tprivate featureInstallerFactory: () => FeatureInstaller\n\tprivate shouldAutoHandleDependencies: boolean\n\tprivate shouldThrowOnListenerError: boolean\n\n\tpublic constructor(options: ActionExecuterOptions) {\n\t\tthis.featureInstallerFactory = options.featureInstallerFactory\n\t\tthis.emitter = options.emitter\n\t\tthis.ui = options.ui\n\t\tthis.actionFactory = options.actionFactory\n\t\tthis.shouldAutoHandleDependencies =\n\t\t\toptions.shouldAutoHandleDependencies ?? true\n\n\t\tthis.shouldThrowOnListenerError = !!options.shouldThrowOnListenerError\n\t}\n\n\tprivate getFeatureInstaller() {\n\t\treturn this.featureInstallerFactory()\n\t}\n\n\tprivate async execute(options: {\n\t\tfeatureCode: FeatureCode\n\t\tactionCode: string\n\t\taction: any\n\t\toriginalExecute: any\n\t\toptions?: Record<string, any>\n\t}): Promise<FeatureInstallResponse & FeatureActionResponse> {\n\t\tconst {\n\t\t\tfeatureCode,\n\t\t\tactionCode,\n\t\t\taction,\n\t\t\toriginalExecute,\n\t\t\toptions: actionOptions,\n\t\t} = options\n\n\t\tconst installer = this.getFeatureInstaller()\n\t\tconst isInstalled = await installer.isInstalled(featureCode)\n\n\t\tif (!isInstalled && !this.shouldAutoHandleDependencies) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'FEATURE_NOT_INSTALLED',\n\t\t\t\tfeatureCode,\n\t\t\t\tfriendlyMessage: `You need to install the \\`${featureCode}\\` feature.`,\n\t\t\t})\n\t\t}\n\n\t\tconst willExecuteResults = await this.emitter.emit('feature.will-execute', {\n\t\t\tfeatureCode,\n\t\t\tactionCode,\n\t\t\toptions: actionOptions,\n\t\t})\n\n\t\tconst { payloads: willExecutePayloads, errors } =\n\t\t\teventResponseUtil.getAllResponsePayloadsAndErrors(\n\t\t\t\twillExecuteResults,\n\t\t\t\tSpruceError\n\t\t\t)\n\n\t\tif (errors?.length ?? 0 > 0) {\n\t\t\tif (this.shouldThrowOnListenerError) {\n\t\t\t\t//@ts-ignore\n\t\t\t\tthrow errors[0]\n\t\t\t}\n\t\t\treturn { errors }\n\t\t}\n\n\t\tactionUtil.assertNoErrorsInResponse(willExecuteResults)\n\n\t\tconst feature = installer.getFeature(featureCode)\n\n\t\tconst asker = new ActionOptionAsker({\n\t\t\tfeatureInstaller: installer,\n\t\t\tfeature,\n\t\t\tactionCode,\n\t\t\tshouldAutoHandleDependencies: this.shouldAutoHandleDependencies,\n\t\t\tui: this.ui,\n\t\t})\n\n\t\tlet response =\n\t\t\t(await asker.installOrMarkAsSkippedMissingDependencies()) ?? {}\n\n\t\tconst installOptions =\n\t\t\t(await asker.askAboutMissingFeatureOptionsIfFeatureIsNotInstalled(\n\t\t\t\tisInstalled,\n\t\t\t\tactionOptions\n\t\t\t)) ??\n\t\t\tactionOptions ??\n\t\t\t{}\n\n\t\tlet answers =\n\t\t\t(await asker.askAboutMissingActionOptions(action, installOptions)) ??\n\t\t\tinstallOptions\n\n\t\tif (!isInstalled) {\n\t\t\tconst ourFeatureResults =\n\t\t\t\t(await asker.installOurFeature(installOptions)) ?? {}\n\t\t\tresponse = merge(response, ourFeatureResults)\n\t\t}\n\n\t\tlet executeResults: FeatureActionResponse = {}\n\n\t\ttry {\n\t\t\texecuteResults = await originalExecute({\n\t\t\t\t...answers,\n\t\t\t})\n\t\t} catch (err) {\n\t\t\texecuteResults.errors = [err]\n\t\t}\n\n\t\tresponse = merge(response, executeResults)\n\n\t\tconst didExecuteResults = await this.emitter.emit('feature.did-execute', {\n\t\t\tresults: response,\n\t\t\tfeatureCode,\n\t\t\tactionCode,\n\t\t})\n\n\t\tconst { payloads, errors: didExecuteErrors } =\n\t\t\teventResponseUtil.getAllResponsePayloadsAndErrors(\n\t\t\t\tdidExecuteResults,\n\t\t\t\tSpruceError\n\t\t\t)\n\n\t\tif (\n\t\t\t(this.shouldThrowOnListenerError && didExecuteErrors?.length) ??\n\t\t\t0 > 0\n\t\t) {\n\t\t\t//@ts-ignore\n\t\t\tthrow didExecuteErrors[0]\n\t\t}\n\n\t\tresponse = actionUtil.mergeActionResults(\n\t\t\tresponse,\n\t\t\t...willExecutePayloads,\n\t\t\t...payloads\n\t\t)\n\n\t\tif (didExecuteErrors) {\n\t\t\tresponse = actionUtil.mergeActionResults(response, {\n\t\t\t\terrors: didExecuteErrors,\n\t\t\t})\n\t\t}\n\n\t\treturn response\n\t}\n\n\tpublic Action<F extends FeatureCode>(\n\t\tfeatureCode: F,\n\t\tactionCode: string\n\t): FeatureAction {\n\t\tconst featureInstaller = this.getFeatureInstaller()\n\n\t\tconst actionFactory = this.actionFactory\n\t\tconst action = actionFactory.Action({\n\t\t\tfeatureCode,\n\t\t\tactionCode,\n\t\t\tactionExecuter: this,\n\t\t\tfeatureInstaller,\n\t\t})\n\n\t\tconst originalExecute = action.execute.bind(action)\n\n\t\taction.execute = async (options: any) => {\n\t\t\treturn this.execute({\n\t\t\t\tfeatureCode,\n\t\t\t\tactionCode,\n\t\t\t\taction,\n\t\t\t\toriginalExecute,\n\t\t\t\toptions,\n\t\t\t})\n\t\t}\n\n\t\treturn action as any\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ActionExecuter.js","names":["ActionExecuter","options","featureInstallerFactory","emitter","ui","actionFactory","shouldAutoHandleDependencies","shouldThrowOnListenerError","featureCode","actionCode","action","originalExecute","actionOptions","installer","getFeatureInstaller","isInstalled","SpruceError","code","friendlyMessage","emit","willExecuteResults","eventResponseUtil","getAllResponsePayloadsAndErrors","willExecutePayloads","payloads","errors","length","actionUtil","assertNoErrorsInResponse","feature","getFeature","asker","ActionOptionAsker","featureInstaller","installOrMarkAsSkippedMissingDependencies","response","askAboutMissingFeatureOptionsIfFeatureIsNotInstalled","installOptions","askAboutMissingActionOptions","answers","installOurFeature","ourFeatureResults","merge","executeResults","results","didExecuteResults","didExecuteErrors","mergeActionResults","Action","actionExecuter","execute","bind"],"sources":["../../src/features/ActionExecuter.ts"],"sourcesContent":["import { eventResponseUtil } from '@sprucelabs/spruce-event-utils'\nimport merge from 'lodash/merge'\nimport SpruceError from '../errors/SpruceError'\nimport { GlobalEmitter } from '../GlobalEmitter'\nimport { GraphicsInterface } from '../types/cli.types'\nimport actionUtil from '../utilities/action.utility'\nimport ActionFactory from './ActionFactory'\nimport ActionOptionAsker from './ActionQuestionAsker'\nimport FeatureInstaller from './FeatureInstaller'\nimport {\n\tFeatureCode,\n\tFeatureInstallResponse,\n\tFeatureAction,\n\tFeatureActionResponse,\n} from './features.types'\n\nexport default class ActionExecuter {\n\tprivate emitter: GlobalEmitter\n\tprivate ui: GraphicsInterface\n\tprivate actionFactory: ActionFactory\n\tprivate featureInstallerFactory: () => FeatureInstaller\n\tprivate shouldAutoHandleDependencies: boolean\n\tprivate shouldThrowOnListenerError: boolean\n\n\tpublic constructor(options: ActionExecuterOptions) {\n\t\tthis.featureInstallerFactory = options.featureInstallerFactory\n\t\tthis.emitter = options.emitter\n\t\tthis.ui = options.ui\n\t\tthis.actionFactory = options.actionFactory\n\t\tthis.shouldAutoHandleDependencies =\n\t\t\toptions.shouldAutoHandleDependencies ?? true\n\n\t\tthis.shouldThrowOnListenerError = !!options.shouldThrowOnListenerError\n\t}\n\n\tprivate getFeatureInstaller() {\n\t\treturn this.featureInstallerFactory()\n\t}\n\n\tprivate async execute(options: {\n\t\tfeatureCode: FeatureCode\n\t\tactionCode: string\n\t\taction: any\n\t\toriginalExecute: any\n\t\toptions?: Record<string, any>\n\t}): Promise<FeatureInstallResponse & FeatureActionResponse> {\n\t\tconst {\n\t\t\tfeatureCode,\n\t\t\tactionCode,\n\t\t\taction,\n\t\t\toriginalExecute,\n\t\t\toptions: actionOptions,\n\t\t} = options\n\n\t\tconst installer = this.getFeatureInstaller()\n\t\tconst isInstalled = await installer.isInstalled(featureCode)\n\n\t\tif (!isInstalled && !this.shouldAutoHandleDependencies) {\n\t\t\tthrow new SpruceError({\n\t\t\t\tcode: 'FEATURE_NOT_INSTALLED',\n\t\t\t\tfeatureCode,\n\t\t\t\tfriendlyMessage: `You need to install the \\`${featureCode}\\` feature.`,\n\t\t\t})\n\t\t}\n\n\t\tconst willExecuteResults = await this.emitter.emit('feature.will-execute', {\n\t\t\tfeatureCode,\n\t\t\tactionCode,\n\t\t\toptions: actionOptions,\n\t\t})\n\n\t\tconst { payloads: willExecutePayloads, errors } =\n\t\t\teventResponseUtil.getAllResponsePayloadsAndErrors(\n\t\t\t\twillExecuteResults,\n\t\t\t\tSpruceError\n\t\t\t)\n\n\t\tif (errors?.length ?? 0 > 0) {\n\t\t\tif (this.shouldThrowOnListenerError) {\n\t\t\t\t//@ts-ignore\n\t\t\t\tthrow errors[0]\n\t\t\t}\n\t\t\treturn { errors }\n\t\t}\n\n\t\tactionUtil.assertNoErrorsInResponse(willExecuteResults)\n\n\t\tconst feature = installer.getFeature(featureCode)\n\n\t\tconst asker = new ActionOptionAsker({\n\t\t\tfeatureInstaller: installer,\n\t\t\tfeature,\n\t\t\tactionCode,\n\t\t\tshouldAutoHandleDependencies: this.shouldAutoHandleDependencies,\n\t\t\tui: this.ui,\n\t\t})\n\n\t\tlet response =\n\t\t\t(await asker.installOrMarkAsSkippedMissingDependencies()) ?? {}\n\n\t\tconst installOptions =\n\t\t\t(await asker.askAboutMissingFeatureOptionsIfFeatureIsNotInstalled(\n\t\t\t\tisInstalled,\n\t\t\t\tactionOptions\n\t\t\t)) ??\n\t\t\tactionOptions ??\n\t\t\t{}\n\n\t\tlet answers =\n\t\t\t(await asker.askAboutMissingActionOptions(action, installOptions)) ??\n\t\t\tinstallOptions\n\n\t\tif (!isInstalled) {\n\t\t\tconst ourFeatureResults =\n\t\t\t\t(await asker.installOurFeature(installOptions)) ?? {}\n\t\t\tresponse = merge(response, ourFeatureResults)\n\t\t}\n\n\t\tlet executeResults: FeatureActionResponse = {}\n\n\t\ttry {\n\t\t\texecuteResults = await originalExecute({\n\t\t\t\t...answers,\n\t\t\t})\n\t\t} catch (err) {\n\t\t\texecuteResults.errors = [err]\n\t\t}\n\n\t\tresponse = merge(response, executeResults)\n\n\t\tconst didExecuteResults = await this.emitter.emit('feature.did-execute', {\n\t\t\tresults: response,\n\t\t\tfeatureCode,\n\t\t\tactionCode,\n\t\t})\n\n\t\tconst { payloads, errors: didExecuteErrors } =\n\t\t\teventResponseUtil.getAllResponsePayloadsAndErrors(\n\t\t\t\tdidExecuteResults,\n\t\t\t\tSpruceError\n\t\t\t)\n\n\t\tif (\n\t\t\t(this.shouldThrowOnListenerError && didExecuteErrors?.length) ??\n\t\t\t0 > 0\n\t\t) {\n\t\t\t//@ts-ignore\n\t\t\tthrow didExecuteErrors[0]\n\t\t}\n\n\t\tresponse = actionUtil.mergeActionResults(\n\t\t\tresponse,\n\t\t\t...willExecutePayloads,\n\t\t\t...payloads\n\t\t)\n\n\t\tif (didExecuteErrors) {\n\t\t\tresponse = actionUtil.mergeActionResults(response, {\n\t\t\t\terrors: didExecuteErrors,\n\t\t\t})\n\t\t}\n\n\t\treturn response\n\t}\n\n\tpublic Action<F extends FeatureCode>(\n\t\tfeatureCode: F,\n\t\tactionCode: string\n\t): FeatureAction {\n\t\tconst featureInstaller = this.getFeatureInstaller()\n\n\t\tconst actionFactory = this.actionFactory\n\t\tconst action = actionFactory.Action({\n\t\t\tfeatureCode,\n\t\t\tactionCode,\n\t\t\tactionExecuter: this,\n\t\t\tfeatureInstaller,\n\t\t})\n\n\t\tconst originalExecute = action.execute.bind(action)\n\n\t\taction.execute = async (options: any) => {\n\t\t\treturn this.execute({\n\t\t\t\tfeatureCode,\n\t\t\t\tactionCode,\n\t\t\t\taction,\n\t\t\t\toriginalExecute,\n\t\t\t\toptions,\n\t\t\t})\n\t\t}\n\n\t\treturn action as any\n\t}\n}\n\nexport interface ActionExecuterOptions {\n\tui: GraphicsInterface\n\temitter: GlobalEmitter\n\tactionFactory: ActionFactory\n\tfeatureInstallerFactory: () => FeatureInstaller\n\tshouldAutoHandleDependencies?: boolean\n\tshouldThrowOnListenerError?: boolean\n}\n"],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import ServiceFactory, { Service, ServiceProvider, ServiceMap } from '../service
|
|
|
2
2
|
import { InternalUpdateHandler } from '../types/cli.types';
|
|
3
3
|
import AbstractFeature, { FeatureDependency } from './AbstractFeature';
|
|
4
4
|
import { InstallFeatureOptions, FeatureInstallResponse, FeatureCode, FeatureMap } from './features.types';
|
|
5
|
-
export
|
|
5
|
+
export declare class FeatureInstallerImpl implements ServiceProvider, FeatureInstaller {
|
|
6
6
|
cwd: string;
|
|
7
7
|
private featureMap;
|
|
8
8
|
private serviceFactory;
|
|
@@ -22,7 +22,7 @@ export default class FeatureInstaller implements ServiceProvider {
|
|
|
22
22
|
mapFeature<C extends FeatureCode>(code: C, feature: FeatureMap[C]): void;
|
|
23
23
|
getFeature<C extends FeatureCode>(code: C): FeatureMap[C];
|
|
24
24
|
areInstalled(codes: FeatureCode[]): Promise<boolean>;
|
|
25
|
-
getFeatureDependencies<C extends FeatureCode>(featureCode: C
|
|
25
|
+
getFeatureDependencies<C extends FeatureCode>(featureCode: C): FeatureDependency[];
|
|
26
26
|
private getFeatureDependenciesIncludingSelf;
|
|
27
27
|
private isDependencyInTracker;
|
|
28
28
|
install(options: InstallFeatureOptions): Promise<FeatureInstallResponse>;
|
|
@@ -39,3 +39,16 @@ export default class FeatureInstaller implements ServiceProvider {
|
|
|
39
39
|
getAllCodes(): FeatureCode[];
|
|
40
40
|
getInstalledFeatures(): Promise<(import("./schema/SchemaFeature").default | import("./test/TestFeature").default | import("./skill/SkillFeature").default<import("@sprucelabs/mercury-types").SpruceSchemas.SpruceCli.v2020_07_22.SkillFeatureSchema> | import("./error/ErrorFeature").default | import("./node/NodeFeature").default<import("@sprucelabs/mercury-types").SpruceSchemas.SpruceCli.v2020_07_22.NodeFeatureOptionsSchema> | import("./dependencies/DependencyFeature").default | import("./cache/CacheFeature").default | import("./conversation/ConversationFeature").default | import("./deploy/DeployFeature").default | import("./event/EventFeature").default | import("./eventContract/EventContractFeature").default | import("./log/LogFeature").default | import("./onboard/OnboardFeature").default | import("./organization/OrganizationFeature").default | import("./permission/PermissionFeature").default | import("./person/PersonFeature").default | import("./polish/PolishFeature").default | import("./sandbox/SandboxFeature").default | import("./store/StoreFeature").default | import("./view/ViewFeature").default | import("./vscode/VsCodeFeature").default | import("./watch/WatchFeature").default)[]>;
|
|
41
41
|
}
|
|
42
|
+
export default interface FeatureInstaller {
|
|
43
|
+
isInstalled(code: FeatureCode): Promise<boolean>;
|
|
44
|
+
markAsSkippedThisRun(code: FeatureCode): void;
|
|
45
|
+
markAsPermanentlySkipped(code: FeatureCode): void;
|
|
46
|
+
isMarkedAsSkipped(code: FeatureCode): boolean;
|
|
47
|
+
getFeature<C extends FeatureCode>(code: C): FeatureMap[C];
|
|
48
|
+
areInstalled(codes: FeatureCode[]): Promise<boolean>;
|
|
49
|
+
install(options: InstallFeatureOptions): Promise<FeatureInstallResponse>;
|
|
50
|
+
getInstalledFeatures(): Promise<FeatureMap[keyof FeatureMap][]>;
|
|
51
|
+
getFeatureDependencies<C extends FeatureCode>(featureCode: C): FeatureDependency[];
|
|
52
|
+
getAllCodes(): FeatureCode[];
|
|
53
|
+
mapFeature<C extends FeatureCode>(code: C, feature: FeatureMap[C]): void;
|
|
54
|
+
}
|
|
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports
|
|
7
|
+
exports.FeatureInstallerImpl = void 0;
|
|
8
8
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
9
9
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
10
10
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
@@ -20,9 +20,9 @@ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o =
|
|
|
20
20
|
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
21
21
|
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
22
22
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
23
|
-
var
|
|
24
|
-
function
|
|
25
|
-
(0, _classCallCheck2["default"])(this,
|
|
23
|
+
var FeatureInstallerImpl = /*#__PURE__*/function () {
|
|
24
|
+
function FeatureInstallerImpl(cwd, serviceFactory) {
|
|
25
|
+
(0, _classCallCheck2["default"])(this, FeatureInstallerImpl);
|
|
26
26
|
(0, _defineProperty2["default"])(this, "cwd", void 0);
|
|
27
27
|
(0, _defineProperty2["default"])(this, "featureMap", {});
|
|
28
28
|
(0, _defineProperty2["default"])(this, "serviceFactory", void 0);
|
|
@@ -35,7 +35,7 @@ var FeatureInstaller = /*#__PURE__*/function () {
|
|
|
35
35
|
this.cwd = cwd;
|
|
36
36
|
this.serviceFactory = serviceFactory;
|
|
37
37
|
}
|
|
38
|
-
(0, _createClass2["default"])(
|
|
38
|
+
(0, _createClass2["default"])(FeatureInstallerImpl, [{
|
|
39
39
|
key: "isInstalled",
|
|
40
40
|
value: function () {
|
|
41
41
|
var _isInstalled = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(code) {
|
|
@@ -149,11 +149,11 @@ var FeatureInstaller = /*#__PURE__*/function () {
|
|
|
149
149
|
}, {
|
|
150
150
|
key: "getFeatureDependencies",
|
|
151
151
|
value: function getFeatureDependencies(featureCode) {
|
|
152
|
-
var trackedFeatures = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
153
152
|
var deps = this.getFeatureDependenciesIncludingSelf({
|
|
154
153
|
code: featureCode,
|
|
155
154
|
isRequired: true
|
|
156
|
-
},
|
|
155
|
+
}, [] // trackedFeatures
|
|
156
|
+
).filter(function (f) {
|
|
157
157
|
return f.code !== featureCode;
|
|
158
158
|
});
|
|
159
159
|
deps = this.sortFeatures(deps);
|
|
@@ -203,7 +203,7 @@ var FeatureInstaller = /*#__PURE__*/function () {
|
|
|
203
203
|
value: function () {
|
|
204
204
|
var _install = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(options) {
|
|
205
205
|
var _this2 = this;
|
|
206
|
-
var features, _options$installFeatu, installFeatureDependencies, didUpdateHandler, shouldAllowEntertainment, results, dependenciesToInstall, i, _didUpdateHandler, f,
|
|
206
|
+
var features, _options$installFeatu, installFeatureDependencies, didUpdateHandler, shouldAllowEntertainment, results, dependenciesToInstall, i, _didUpdateHandler, f, _code, _isInstalled2, _didUpdateHandler2, _loop, _i, pendingResults;
|
|
207
207
|
return _regenerator["default"].wrap(function _callee3$(_context4) {
|
|
208
208
|
while (1) {
|
|
209
209
|
switch (_context4.prev = _context4.next) {
|
|
@@ -212,8 +212,8 @@ var FeatureInstaller = /*#__PURE__*/function () {
|
|
|
212
212
|
shouldAllowEntertainment = !!features.find(function (f) {
|
|
213
213
|
return f.code === 'skill';
|
|
214
214
|
});
|
|
215
|
-
if (
|
|
216
|
-
|
|
215
|
+
if (FeatureInstallerImpl.startInFlightIntertainmentHandler && shouldAllowEntertainment) {
|
|
216
|
+
FeatureInstallerImpl.startInFlightIntertainmentHandler(function (handler) {
|
|
217
217
|
didUpdateHandler = handler;
|
|
218
218
|
});
|
|
219
219
|
}
|
|
@@ -227,21 +227,21 @@ var FeatureInstaller = /*#__PURE__*/function () {
|
|
|
227
227
|
break;
|
|
228
228
|
}
|
|
229
229
|
f = features[i];
|
|
230
|
-
|
|
231
|
-
(_didUpdateHandler = didUpdateHandler) === null || _didUpdateHandler === void 0 ? void 0 : _didUpdateHandler("Checking if ".concat(
|
|
230
|
+
_code = f.code;
|
|
231
|
+
(_didUpdateHandler = didUpdateHandler) === null || _didUpdateHandler === void 0 ? void 0 : _didUpdateHandler("Checking if ".concat(_code, " is installed..."));
|
|
232
232
|
_context4.next = 13;
|
|
233
|
-
return this.isInstalled(
|
|
233
|
+
return this.isInstalled(_code);
|
|
234
234
|
case 13:
|
|
235
|
-
|
|
236
|
-
if (!
|
|
235
|
+
_isInstalled2 = _context4.sent;
|
|
236
|
+
if (!_isInstalled2 && installFeatureDependencies) {
|
|
237
237
|
(_didUpdateHandler2 = didUpdateHandler) === null || _didUpdateHandler2 === void 0 ? void 0 : _didUpdateHandler2("It is not, checking dependencies...");
|
|
238
238
|
dependenciesToInstall = dependenciesToInstall.concat(this.getFeatureDependenciesIncludingSelf({
|
|
239
|
-
code:
|
|
239
|
+
code: _code,
|
|
240
240
|
isRequired: true
|
|
241
241
|
}));
|
|
242
|
-
} else if (!
|
|
242
|
+
} else if (!_isInstalled2) {
|
|
243
243
|
dependenciesToInstall.push({
|
|
244
|
-
code:
|
|
244
|
+
code: _code,
|
|
245
245
|
isRequired: true
|
|
246
246
|
});
|
|
247
247
|
}
|
|
@@ -305,8 +305,8 @@ var FeatureInstaller = /*#__PURE__*/function () {
|
|
|
305
305
|
case 29:
|
|
306
306
|
pendingResults = _context4.sent;
|
|
307
307
|
results = (0, _merge["default"])(results, pendingResults);
|
|
308
|
-
if (
|
|
309
|
-
|
|
308
|
+
if (FeatureInstallerImpl.stopInFlightIntertainmentHandler && shouldAllowEntertainment) {
|
|
309
|
+
FeatureInstallerImpl.stopInFlightIntertainmentHandler();
|
|
310
310
|
}
|
|
311
311
|
return _context4.abrupt("return", results);
|
|
312
312
|
case 33:
|
|
@@ -404,13 +404,13 @@ var FeatureInstaller = /*#__PURE__*/function () {
|
|
|
404
404
|
key: "installPackageDependenciesForFeatures",
|
|
405
405
|
value: function () {
|
|
406
406
|
var _installPackageDependenciesForFeatures = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(features, didUpdateHandler) {
|
|
407
|
-
var _iterator, _step,
|
|
407
|
+
var _iterator, _step, _feature;
|
|
408
408
|
return _regenerator["default"].wrap(function _callee6$(_context7) {
|
|
409
409
|
while (1) {
|
|
410
410
|
switch (_context7.prev = _context7.next) {
|
|
411
411
|
case 0:
|
|
412
|
-
if (
|
|
413
|
-
|
|
412
|
+
if (FeatureInstallerImpl.startInFlightIntertainmentHandler) {
|
|
413
|
+
FeatureInstallerImpl.startInFlightIntertainmentHandler(function (handler) {
|
|
414
414
|
didUpdateHandler = handler;
|
|
415
415
|
});
|
|
416
416
|
}
|
|
@@ -422,9 +422,9 @@ var FeatureInstaller = /*#__PURE__*/function () {
|
|
|
422
422
|
_context7.next = 10;
|
|
423
423
|
break;
|
|
424
424
|
}
|
|
425
|
-
|
|
425
|
+
_feature = _step.value;
|
|
426
426
|
_context7.next = 8;
|
|
427
|
-
return this.queueInstallPackageDependenciesWithoutEntertainment(
|
|
427
|
+
return this.queueInstallPackageDependenciesWithoutEntertainment(_feature, didUpdateHandler);
|
|
428
428
|
case 8:
|
|
429
429
|
_context7.next = 4;
|
|
430
430
|
break;
|
|
@@ -443,8 +443,8 @@ var FeatureInstaller = /*#__PURE__*/function () {
|
|
|
443
443
|
_context7.next = 20;
|
|
444
444
|
return this.installAllPending(didUpdateHandler);
|
|
445
445
|
case 20:
|
|
446
|
-
if (
|
|
447
|
-
|
|
446
|
+
if (FeatureInstallerImpl.stopInFlightIntertainmentHandler) {
|
|
447
|
+
FeatureInstallerImpl.stopInFlightIntertainmentHandler();
|
|
448
448
|
}
|
|
449
449
|
case 21:
|
|
450
450
|
case "end":
|
|
@@ -462,7 +462,7 @@ var FeatureInstaller = /*#__PURE__*/function () {
|
|
|
462
462
|
key: "installAllPending",
|
|
463
463
|
value: function () {
|
|
464
464
|
var _installAllPending = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(didUpdateHandler) {
|
|
465
|
-
var pkgService, settings, _iterator2, _step2,
|
|
465
|
+
var pkgService, settings, _iterator2, _step2, _code2, results, _iterator3, _step3, installFeature, _feature2, afterInstallResults;
|
|
466
466
|
return _regenerator["default"].wrap(function _callee7$(_context8) {
|
|
467
467
|
while (1) {
|
|
468
468
|
switch (_context8.prev = _context8.next) {
|
|
@@ -492,8 +492,8 @@ var FeatureInstaller = /*#__PURE__*/function () {
|
|
|
492
492
|
_iterator2 = _createForOfIteratorHelper(this.featuresToMarkAsInstalled);
|
|
493
493
|
try {
|
|
494
494
|
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
495
|
-
|
|
496
|
-
settings.markAsInstalled(
|
|
495
|
+
_code2 = _step2.value;
|
|
496
|
+
settings.markAsInstalled(_code2);
|
|
497
497
|
}
|
|
498
498
|
} catch (err) {
|
|
499
499
|
_iterator2.e(err);
|
|
@@ -511,9 +511,9 @@ var FeatureInstaller = /*#__PURE__*/function () {
|
|
|
511
511
|
break;
|
|
512
512
|
}
|
|
513
513
|
installFeature = _step3.value;
|
|
514
|
-
|
|
514
|
+
_feature2 = this.getFeature(installFeature.code);
|
|
515
515
|
_context8.next = 24;
|
|
516
|
-
return
|
|
516
|
+
return _feature2.afterPackageInstall(
|
|
517
517
|
//@ts-ignore
|
|
518
518
|
installFeature.options);
|
|
519
519
|
case 24:
|
|
@@ -704,9 +704,9 @@ var FeatureInstaller = /*#__PURE__*/function () {
|
|
|
704
704
|
return getInstalledFeatures;
|
|
705
705
|
}()
|
|
706
706
|
}]);
|
|
707
|
-
return
|
|
707
|
+
return FeatureInstallerImpl;
|
|
708
708
|
}();
|
|
709
|
-
exports
|
|
710
|
-
(0, _defineProperty2["default"])(
|
|
711
|
-
(0, _defineProperty2["default"])(
|
|
709
|
+
exports.FeatureInstallerImpl = FeatureInstallerImpl;
|
|
710
|
+
(0, _defineProperty2["default"])(FeatureInstallerImpl, "startInFlightIntertainmentHandler", void 0);
|
|
711
|
+
(0, _defineProperty2["default"])(FeatureInstallerImpl, "stopInFlightIntertainmentHandler", void 0);
|
|
712
712
|
//# sourceMappingURL=FeatureInstaller.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureInstaller.js","names":["FeatureInstaller","cwd","serviceFactory","code","feature","getFeature","isInstalled","Service","isMarkedAsInstalled","isMarkedAsSkipped","featuresMarkedAsSkippedThisRun","push","markAsPermanentlySkipped","indexOf","isMarkedAsPermanentlySkipped","featureMap","SpruceError","featureCode","codes","Promise","all","map","f","results","i","length","result","trackedFeatures","deps","getFeatureDependenciesIncludingSelf","isRequired","filter","sortFeatures","featureDependency","features","isDependencyInTracker","dependencies","dependency","x","dependencyDependencies","find","options","installFeatureDependencies","didUpdateHandler","shouldAllowEntertainment","startInFlightIntertainmentHandler","handler","pendingFeatureInstalls","dependenciesToInstall","concat","uniq","isInstalledOrPendingInstall","installOptions","installFeature","installResults","merge","installAllPending","pendingResults","stopInFlightIntertainmentHandler","optionsSchema","validateSchemaValues","beforePackageInstall","beforeInstallResults","queueInstallPackageDependenciesWithoutEntertainment","packagesInstalled","afterPackageInstalls","featuresToMarkAsInstalled","files","undefined","installPackageDependenciesForFeatures","pkgService","packagesToInstall","install","devPackagesToInstall","isDev","settings","markAsInstalled","afterPackageInstall","afterInstallResults","packageDependencies","forEach","pkg","packageName","buildPackageName","name","getFeatureNameAndDesc","nameReadable","description","featureDependencies","sort","a","b","aFeature","bFeature","aDependsOnB","d","bDependsOnA","installOrderWeight","type","Object","keys","dep","getAllCodes","installed"],"sources":["../../src/features/FeatureInstaller.ts"],"sourcesContent":["import { validateSchemaValues } from '@sprucelabs/schema'\nimport { uniq } from 'lodash'\nimport merge from 'lodash/merge'\nimport SpruceError from '../errors/SpruceError'\nimport ServiceFactory, {\n\tService,\n\tServiceProvider,\n\tServiceMap,\n} from '../services/ServiceFactory'\nimport { InternalUpdateHandler, NpmPackage } from '../types/cli.types'\nimport AbstractFeature, { FeatureDependency } from './AbstractFeature'\nimport {\n\tInstallFeatureOptions,\n\tFeatureInstallResponse,\n\tFeatureCode,\n\tInstallFeature,\n\tFeatureMap,\n} from './features.types'\n\nexport default class FeatureInstaller implements ServiceProvider {\n\tpublic cwd: string\n\n\tprivate featureMap: Partial<FeatureMap> = {}\n\tprivate serviceFactory: ServiceFactory\n\tprivate featuresMarkedAsSkippedThisRun: FeatureCode[] = []\n\tpublic static startInFlightIntertainmentHandler?: (\n\t\tdidUpdateHandler: (handler: (message: string) => void) => void\n\t) => void\n\tpublic static stopInFlightIntertainmentHandler?: () => void\n\tprivate packagesToInstall: string[] = []\n\tprivate devPackagesToInstall: string[] = []\n\tprivate featuresToMarkAsInstalled: string[] = []\n\tprivate afterPackageInstalls: InstallFeature[] = []\n\tprivate pendingFeatureInstalls: Record<string, boolean> = {}\n\n\tpublic constructor(cwd: string, serviceFactory: ServiceFactory) {\n\t\tthis.cwd = cwd\n\t\tthis.serviceFactory = serviceFactory\n\t}\n\n\tpublic async isInstalled(code: FeatureCode): Promise<boolean> {\n\t\tconst feature = this.getFeature(code)\n\n\t\tif (feature.isInstalled) {\n\t\t\treturn feature.isInstalled()\n\t\t}\n\n\t\treturn this.Service('settings').isMarkedAsInstalled(code)\n\t}\n\n\tpublic markAsSkippedThisRun(code: FeatureCode) {\n\t\tif (!this.isMarkedAsSkipped(code)) {\n\t\t\tthis.featuresMarkedAsSkippedThisRun.push(code)\n\t\t}\n\t}\n\tpublic markAsPermanentlySkipped(code: FeatureCode) {\n\t\tif (!this.isMarkedAsSkipped(code)) {\n\t\t\tthis.Service('settings').markAsPermanentlySkipped(code)\n\t\t}\n\t}\n\n\tpublic isMarkedAsSkipped(code: FeatureCode) {\n\t\treturn (\n\t\t\tthis.featuresMarkedAsSkippedThisRun.indexOf(code) > -1 ||\n\t\t\tthis.Service('settings').isMarkedAsPermanentlySkipped(code)\n\t\t)\n\t}\n\n\tpublic mapFeature<C extends FeatureCode>(code: C, feature: FeatureMap[C]) {\n\t\tthis.featureMap[code] = feature\n\t}\n\n\tpublic getFeature<C extends FeatureCode>(code: C): FeatureMap[C] {\n\t\tconst feature = this.featureMap[code]\n\t\tif (!feature) {\n\t\t\tthrow new SpruceError({ code: 'INVALID_FEATURE_CODE', featureCode: code })\n\t\t}\n\n\t\treturn feature as FeatureMap[C]\n\t}\n\n\tpublic async areInstalled(codes: FeatureCode[]) {\n\t\tconst results = await Promise.all(\n\t\t\tcodes.map((f) => {\n\t\t\t\treturn this.isInstalled(f)\n\t\t\t})\n\t\t)\n\n\t\tfor (let i = 0; i < results.length; i += 1) {\n\t\t\tconst result = results[i]\n\t\t\tif (!result) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\treturn true\n\t}\n\n\tpublic getFeatureDependencies<C extends FeatureCode>(\n\t\tfeatureCode: C,\n\t\ttrackedFeatures: FeatureDependency[] = []\n\t): FeatureDependency[] {\n\t\tlet deps = this.getFeatureDependenciesIncludingSelf(\n\t\t\t{ code: featureCode, isRequired: true },\n\t\t\ttrackedFeatures\n\t\t).filter((f) => f.code !== featureCode)\n\n\t\tdeps = this.sortFeatures(deps)\n\n\t\treturn deps\n\t}\n\n\tprivate getFeatureDependenciesIncludingSelf(\n\t\tfeatureDependency: FeatureDependency,\n\t\ttrackedFeatures: FeatureDependency[] = []\n\t): FeatureDependency[] {\n\t\tconst features: FeatureDependency[] = []\n\n\t\tif (!this.isDependencyInTracker(trackedFeatures, featureDependency)) {\n\t\t\tfeatures.push(featureDependency)\n\t\t\ttrackedFeatures.push(featureDependency)\n\t\t}\n\n\t\tconst feature = this.getFeature(featureDependency.code)\n\t\tconst dependencies = feature.dependencies\n\n\t\tfor (let i = 0; i < dependencies.length; i += 1) {\n\t\t\tconst dependency = dependencies[i]\n\t\t\tif (!this.isDependencyInTracker(trackedFeatures, dependency)) {\n\t\t\t\tfeatures.push(dependency)\n\t\t\t\ttrackedFeatures.push(dependency)\n\t\t\t}\n\t\t}\n\n\t\tfor (let x = 0; x < dependencies.length; x += 1) {\n\t\t\tconst dependency = dependencies[x]\n\t\t\tlet dependencyDependencies = this.getFeatureDependenciesIncludingSelf(\n\t\t\t\tdependency,\n\t\t\t\ttrackedFeatures\n\t\t\t)\n\t\t\tif (!dependency.isRequired) {\n\t\t\t\tdependencyDependencies = dependencyDependencies.map((f) => ({\n\t\t\t\t\t...f,\n\t\t\t\t\tisRequired: false,\n\t\t\t\t}))\n\t\t\t}\n\n\t\t\tfeatures.push(...dependencyDependencies)\n\t\t}\n\n\t\treturn features\n\t}\n\n\tprivate isDependencyInTracker(\n\t\ttrackedFeatures: FeatureDependency[],\n\t\tdependency: FeatureDependency\n\t) {\n\t\treturn !!trackedFeatures.find((f) => f.code === dependency.code)\n\t}\n\n\tpublic async install(\n\t\toptions: InstallFeatureOptions\n\t): Promise<FeatureInstallResponse> {\n\t\tlet {\n\t\t\tfeatures,\n\t\t\tinstallFeatureDependencies = true,\n\t\t\tdidUpdateHandler,\n\t\t} = options\n\n\t\tconst shouldAllowEntertainment = !!features.find((f) => f.code === 'skill')\n\n\t\tif (\n\t\t\tFeatureInstaller.startInFlightIntertainmentHandler &&\n\t\t\tshouldAllowEntertainment\n\t\t) {\n\t\t\tFeatureInstaller.startInFlightIntertainmentHandler(\n\t\t\t\t(handler: InternalUpdateHandler) => {\n\t\t\t\t\tdidUpdateHandler = handler\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\n\t\tthis.pendingFeatureInstalls = {}\n\n\t\tlet results: FeatureInstallResponse = {}\n\n\t\tlet dependenciesToInstall: FeatureDependency[] = []\n\n\t\tfor (let i = 0; i < features.length; i += 1) {\n\t\t\tconst f = features[i]\n\t\t\tconst code = f.code\n\n\t\t\tdidUpdateHandler?.(`Checking if ${code} is installed...`)\n\n\t\t\tconst isInstalled = await this.isInstalled(code)\n\t\t\tif (!isInstalled && installFeatureDependencies) {\n\t\t\t\tdidUpdateHandler?.(`It is not, checking dependencies...`)\n\t\t\t\tdependenciesToInstall = dependenciesToInstall.concat(\n\t\t\t\t\tthis.getFeatureDependenciesIncludingSelf({ code, isRequired: true })\n\t\t\t\t)\n\t\t\t} else if (!isInstalled) {\n\t\t\t\tdependenciesToInstall.push({ code, isRequired: true })\n\t\t\t}\n\t\t}\n\n\t\tdependenciesToInstall = uniq(dependenciesToInstall)\n\t\tdependenciesToInstall = this.sortFeatures(dependenciesToInstall)\n\n\t\tfor (let i = 0; i < dependenciesToInstall.length; i += 1) {\n\t\t\tconst { code, isRequired } = dependenciesToInstall[i]\n\n\t\t\tconst isInstalled = await this.isInstalledOrPendingInstall(code)\n\n\t\t\tif (!isInstalled && isRequired) {\n\t\t\t\tconst installOptions =\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\toptions.features.find((f) => f.code === code)?.options\n\n\t\t\t\tconst installFeature = {\n\t\t\t\t\tcode: dependenciesToInstall[i].code,\n\t\t\t\t\toptions: installOptions,\n\t\t\t\t} as InstallFeature\n\n\t\t\t\tdidUpdateHandler?.(`Installing the ${installFeature.code} feature....`)\n\n\t\t\t\tconst installResults = await this.installFeature(\n\t\t\t\t\tinstallFeature,\n\t\t\t\t\tdidUpdateHandler\n\t\t\t\t)\n\t\t\t\tresults = merge(results, installResults)\n\t\t\t}\n\t\t}\n\n\t\tconst pendingResults = await this.installAllPending(didUpdateHandler)\n\t\tresults = merge(results, pendingResults)\n\n\t\tif (\n\t\t\tFeatureInstaller.stopInFlightIntertainmentHandler &&\n\t\t\tshouldAllowEntertainment\n\t\t) {\n\t\t\tFeatureInstaller.stopInFlightIntertainmentHandler()\n\t\t}\n\n\t\treturn results\n\t}\n\n\tprivate isInstalledOrPendingInstall(code: string) {\n\t\treturn this.pendingFeatureInstalls[code] || this.isInstalled(code as any)\n\t}\n\n\tprivate async installFeature(\n\t\tinstallFeature: InstallFeature,\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t): Promise<FeatureInstallResponse> {\n\t\tthis.pendingFeatureInstalls[installFeature.code] = true\n\n\t\tconst feature = this.getFeature(installFeature.code) as AbstractFeature\n\n\t\tif (feature.optionsSchema) {\n\t\t\t//@ts-ignore\n\t\t\tvalidateSchemaValues(feature.optionsSchema, installFeature.options ?? {})\n\t\t}\n\n\t\tdidUpdateHandler?.(`Running before package install hook...`)\n\t\tconst beforeInstallResults = await feature.beforePackageInstall(\n\t\t\t//@ts-ignore\n\t\t\tinstallFeature.options\n\t\t)\n\n\t\tif (beforeInstallResults.cwd) {\n\t\t\tthis.cwd = beforeInstallResults.cwd\n\t\t}\n\n\t\tdidUpdateHandler?.(`Installing package dependencies...`)\n\t\tconst packagesInstalled =\n\t\t\tawait this.queueInstallPackageDependenciesWithoutEntertainment(\n\t\t\t\tfeature,\n\t\t\t\tdidUpdateHandler\n\t\t\t)\n\n\t\tdidUpdateHandler?.(`Running after package install hook...`)\n\n\t\tthis.afterPackageInstalls.push(installFeature)\n\n\t\tif (!feature.isInstalled) {\n\t\t\tthis.featuresToMarkAsInstalled.push(feature.code)\n\t\t}\n\n\t\tconst files = [...(beforeInstallResults.files ?? [])]\n\n\t\treturn {\n\t\t\tfiles: files ?? undefined,\n\t\t\tpackagesInstalled,\n\t\t}\n\t}\n\n\tpublic async installPackageDependencies(\n\t\tfeature: AbstractFeature,\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t) {\n\t\treturn this.installPackageDependenciesForFeatures(\n\t\t\t[feature],\n\t\t\tdidUpdateHandler\n\t\t)\n\t}\n\n\tpublic async installPackageDependenciesForFeatures(\n\t\tfeatures: AbstractFeature[],\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t) {\n\t\tif (FeatureInstaller.startInFlightIntertainmentHandler) {\n\t\t\tFeatureInstaller.startInFlightIntertainmentHandler(\n\t\t\t\t(handler: InternalUpdateHandler) => {\n\t\t\t\t\tdidUpdateHandler = handler\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\n\t\tfor (const feature of features) {\n\t\t\tawait this.queueInstallPackageDependenciesWithoutEntertainment(\n\t\t\t\tfeature,\n\t\t\t\tdidUpdateHandler\n\t\t\t)\n\t\t}\n\n\t\tawait this.installAllPending(didUpdateHandler)\n\n\t\tif (FeatureInstaller.stopInFlightIntertainmentHandler) {\n\t\t\tFeatureInstaller.stopInFlightIntertainmentHandler()\n\t\t}\n\t}\n\n\tprivate async installAllPending(\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t): Promise<FeatureInstallResponse> {\n\t\tconst pkgService = this.Service('pkg')\n\n\t\tif (this.packagesToInstall.length > 0) {\n\t\t\tdidUpdateHandler?.(\n\t\t\t\t`Installing ${this.packagesToInstall.length} node module${\n\t\t\t\t\tthis.packagesToInstall.length === 1 ? '' : 's'\n\t\t\t\t}. Please be patient.`\n\t\t\t)\n\t\t\tawait pkgService.install(this.packagesToInstall, {})\n\t\t}\n\n\t\tif (this.devPackagesToInstall.length > 0) {\n\t\t\tdidUpdateHandler?.(\n\t\t\t\t`Now installing ${this.devPackagesToInstall.length} DEV node module${\n\t\t\t\t\tthis.devPackagesToInstall.length === 1 ? '' : 's'\n\t\t\t\t}. Please be patient.`\n\t\t\t)\n\t\t\tawait pkgService.install(this.devPackagesToInstall, {\n\t\t\t\tisDev: true,\n\t\t\t})\n\t\t}\n\n\t\tthis.packagesToInstall = []\n\t\tthis.devPackagesToInstall = []\n\n\t\tconst settings = this.Service('settings')\n\n\t\tfor (const code of this.featuresToMarkAsInstalled) {\n\t\t\tsettings.markAsInstalled(code)\n\t\t}\n\n\t\tthis.featuresToMarkAsInstalled = []\n\n\t\tlet results: FeatureInstallResponse = {}\n\n\t\tfor (const installFeature of this.afterPackageInstalls) {\n\t\t\tconst feature = this.getFeature(installFeature.code)\n\t\t\tconst afterInstallResults = await feature.afterPackageInstall(\n\t\t\t\t//@ts-ignore\n\t\t\t\tinstallFeature.options\n\t\t\t)\n\n\t\t\tresults = merge(results, afterInstallResults)\n\t\t}\n\n\t\treturn results\n\t}\n\n\tprivate async queueInstallPackageDependenciesWithoutEntertainment(\n\t\tfeature: AbstractFeature,\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t) {\n\t\tconst packagesInstalled: NpmPackage[] = []\n\t\tconst pkgService = this.Service('pkg')\n\n\t\tfeature.packageDependencies?.forEach((pkg) => {\n\t\t\tconst packageName = pkgService.buildPackageName(pkg)\n\n\t\t\tpackagesInstalled.push(pkg)\n\n\t\t\tdidUpdateHandler?.(`Checking node dependency: ${pkg.name}`)\n\n\t\t\tif (pkg.isDev && this.devPackagesToInstall.indexOf(packageName) === -1) {\n\t\t\t\tthis.devPackagesToInstall.push(packageName)\n\t\t\t} else if (\n\t\t\t\t!pkg.isDev &&\n\t\t\t\tthis.packagesToInstall.indexOf(packageName) === -1\n\t\t\t) {\n\t\t\t\tthis.packagesToInstall.push(packageName)\n\t\t\t}\n\t\t})\n\n\t\tif (this.packagesToInstall.length > 0) {\n\t\t\tdidUpdateHandler?.(\n\t\t\t\t`Queueing install of ${this.packagesToInstall.length} node dependenc${\n\t\t\t\t\tthis.packagesToInstall.length === 1\n\t\t\t\t\t\t? 'y.'\n\t\t\t\t\t\t: 'ies for ' + this.getFeatureNameAndDesc(feature) + '...'\n\t\t\t\t}.`\n\t\t\t)\n\t\t}\n\n\t\tif (this.devPackagesToInstall.length > 0) {\n\t\t\tdidUpdateHandler?.(\n\t\t\t\t`Queueing install of ${\n\t\t\t\t\tthis.devPackagesToInstall.length\n\t\t\t\t} DEV node dependenc${\n\t\t\t\t\tthis.devPackagesToInstall.length === 1\n\t\t\t\t\t\t? 'y.'\n\t\t\t\t\t\t: 'ies for ' + this.getFeatureNameAndDesc(feature) + '. 🤘'\n\t\t\t\t}.`\n\t\t\t)\n\t\t}\n\n\t\treturn packagesInstalled\n\t}\n\n\tprivate getFeatureNameAndDesc(feature: AbstractFeature) {\n\t\treturn `${feature.nameReadable}${\n\t\t\tfeature.description ? ' (' + feature.description + ')' : ''\n\t\t}`\n\t}\n\n\tprivate sortFeatures(\n\t\tfeatureDependencies: FeatureDependency[]\n\t): FeatureDependency[] {\n\t\treturn [...featureDependencies].sort((a, b) => {\n\t\t\tconst aFeature = this.getFeature(a.code)\n\t\t\tconst bFeature = this.getFeature(b.code)\n\n\t\t\tconst aDependsOnB = aFeature.dependencies.find((d) => d.code === b.code)\n\t\t\tconst bDependsOnA = bFeature.dependencies.find((d) => d.code === a.code)\n\n\t\t\tif (\n\t\t\t\taDependsOnB ||\n\t\t\t\taFeature.installOrderWeight < bFeature.installOrderWeight\n\t\t\t) {\n\t\t\t\treturn 1\n\t\t\t} else if (\n\t\t\t\tbDependsOnA ||\n\t\t\t\taFeature.installOrderWeight > bFeature.installOrderWeight\n\t\t\t) {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\treturn 0\n\t\t})\n\t}\n\n\tpublic Service<S extends Service>(type: S, cwd?: string): ServiceMap[S] {\n\t\treturn this.serviceFactory.Service(cwd ?? this.cwd, type)\n\t}\n\n\tpublic getOptionsForFeature(code: FeatureCode) {\n\t\treturn this.getFeature(code).optionsSchema\n\t}\n\n\tpublic getAllCodes(): FeatureCode[] {\n\t\tconst codes = Object.keys(this.featureMap) as FeatureCode[]\n\t\treturn this.sortFeatures(\n\t\t\tcodes.map((code) => ({ code, isRequired: true }))\n\t\t).map((dep) => dep.code)\n\t}\n\n\tpublic async getInstalledFeatures() {\n\t\tconst installed = await Promise.all(\n\t\t\tthis.getAllCodes().map(async (code) => {\n\t\t\t\tconst isInstalled = await this.isInstalled(code)\n\t\t\t\tif (isInstalled) {\n\t\t\t\t\treturn this.getFeature(code)\n\t\t\t\t}\n\n\t\t\t\treturn false\n\t\t\t})\n\t\t)\n\n\t\treturn installed.filter((f) => !!f) as FeatureMap[keyof FeatureMap][]\n\t}\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FeatureInstaller.js","names":["FeatureInstallerImpl","cwd","serviceFactory","code","feature","getFeature","isInstalled","Service","isMarkedAsInstalled","isMarkedAsSkipped","featuresMarkedAsSkippedThisRun","push","markAsPermanentlySkipped","indexOf","isMarkedAsPermanentlySkipped","featureMap","SpruceError","featureCode","codes","Promise","all","map","f","results","i","length","result","deps","getFeatureDependenciesIncludingSelf","isRequired","filter","sortFeatures","featureDependency","trackedFeatures","features","isDependencyInTracker","dependencies","dependency","x","dependencyDependencies","find","options","installFeatureDependencies","didUpdateHandler","shouldAllowEntertainment","startInFlightIntertainmentHandler","handler","pendingFeatureInstalls","dependenciesToInstall","concat","uniq","isInstalledOrPendingInstall","installOptions","installFeature","installResults","merge","installAllPending","pendingResults","stopInFlightIntertainmentHandler","optionsSchema","validateSchemaValues","beforePackageInstall","beforeInstallResults","queueInstallPackageDependenciesWithoutEntertainment","packagesInstalled","afterPackageInstalls","featuresToMarkAsInstalled","files","undefined","installPackageDependenciesForFeatures","pkgService","packagesToInstall","install","devPackagesToInstall","isDev","settings","markAsInstalled","afterPackageInstall","afterInstallResults","packageDependencies","forEach","pkg","packageName","buildPackageName","name","getFeatureNameAndDesc","nameReadable","description","featureDependencies","sort","a","b","aFeature","bFeature","aDependsOnB","d","bDependsOnA","installOrderWeight","type","Object","keys","dep","getAllCodes","installed"],"sources":["../../src/features/FeatureInstaller.ts"],"sourcesContent":["import { validateSchemaValues } from '@sprucelabs/schema'\nimport { uniq } from 'lodash'\nimport merge from 'lodash/merge'\nimport SpruceError from '../errors/SpruceError'\nimport ServiceFactory, {\n\tService,\n\tServiceProvider,\n\tServiceMap,\n} from '../services/ServiceFactory'\nimport { InternalUpdateHandler, NpmPackage } from '../types/cli.types'\nimport AbstractFeature, { FeatureDependency } from './AbstractFeature'\nimport {\n\tInstallFeatureOptions,\n\tFeatureInstallResponse,\n\tFeatureCode,\n\tInstallFeature,\n\tFeatureMap,\n} from './features.types'\n\nexport class FeatureInstallerImpl implements ServiceProvider, FeatureInstaller {\n\tpublic cwd: string\n\n\tprivate featureMap: Partial<FeatureMap> = {}\n\tprivate serviceFactory: ServiceFactory\n\tprivate featuresMarkedAsSkippedThisRun: FeatureCode[] = []\n\tpublic static startInFlightIntertainmentHandler?: (\n\t\tdidUpdateHandler: (handler: (message: string) => void) => void\n\t) => void\n\tpublic static stopInFlightIntertainmentHandler?: () => void\n\tprivate packagesToInstall: string[] = []\n\tprivate devPackagesToInstall: string[] = []\n\tprivate featuresToMarkAsInstalled: string[] = []\n\tprivate afterPackageInstalls: InstallFeature[] = []\n\tprivate pendingFeatureInstalls: Record<string, boolean> = {}\n\n\tpublic constructor(cwd: string, serviceFactory: ServiceFactory) {\n\t\tthis.cwd = cwd\n\t\tthis.serviceFactory = serviceFactory\n\t}\n\n\tpublic async isInstalled(code: FeatureCode): Promise<boolean> {\n\t\tconst feature = this.getFeature(code)\n\n\t\tif (feature.isInstalled) {\n\t\t\treturn feature.isInstalled()\n\t\t}\n\n\t\treturn this.Service('settings').isMarkedAsInstalled(code)\n\t}\n\n\tpublic markAsSkippedThisRun(code: FeatureCode) {\n\t\tif (!this.isMarkedAsSkipped(code)) {\n\t\t\tthis.featuresMarkedAsSkippedThisRun.push(code)\n\t\t}\n\t}\n\tpublic markAsPermanentlySkipped(code: FeatureCode) {\n\t\tif (!this.isMarkedAsSkipped(code)) {\n\t\t\tthis.Service('settings').markAsPermanentlySkipped(code)\n\t\t}\n\t}\n\n\tpublic isMarkedAsSkipped(code: FeatureCode) {\n\t\treturn (\n\t\t\tthis.featuresMarkedAsSkippedThisRun.indexOf(code) > -1 ||\n\t\t\tthis.Service('settings').isMarkedAsPermanentlySkipped(code)\n\t\t)\n\t}\n\n\tpublic mapFeature<C extends FeatureCode>(code: C, feature: FeatureMap[C]) {\n\t\tthis.featureMap[code] = feature\n\t}\n\n\tpublic getFeature<C extends FeatureCode>(code: C): FeatureMap[C] {\n\t\tconst feature = this.featureMap[code]\n\t\tif (!feature) {\n\t\t\tthrow new SpruceError({ code: 'INVALID_FEATURE_CODE', featureCode: code })\n\t\t}\n\n\t\treturn feature as FeatureMap[C]\n\t}\n\n\tpublic async areInstalled(codes: FeatureCode[]) {\n\t\tconst results = await Promise.all(\n\t\t\tcodes.map((f) => {\n\t\t\t\treturn this.isInstalled(f)\n\t\t\t})\n\t\t)\n\n\t\tfor (let i = 0; i < results.length; i += 1) {\n\t\t\tconst result = results[i]\n\t\t\tif (!result) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\n\t\treturn true\n\t}\n\n\tpublic getFeatureDependencies<C extends FeatureCode>(\n\t\tfeatureCode: C\n\t\t// trackedFeatures: FeatureDependency[] = []\n\t): FeatureDependency[] {\n\t\tlet deps = this.getFeatureDependenciesIncludingSelf(\n\t\t\t{ code: featureCode, isRequired: true },\n\t\t\t[] // trackedFeatures\n\t\t).filter((f) => f.code !== featureCode)\n\n\t\tdeps = this.sortFeatures(deps)\n\n\t\treturn deps\n\t}\n\n\tprivate getFeatureDependenciesIncludingSelf(\n\t\tfeatureDependency: FeatureDependency,\n\t\ttrackedFeatures: FeatureDependency[] = []\n\t): FeatureDependency[] {\n\t\tconst features: FeatureDependency[] = []\n\n\t\tif (!this.isDependencyInTracker(trackedFeatures, featureDependency)) {\n\t\t\tfeatures.push(featureDependency)\n\t\t\ttrackedFeatures.push(featureDependency)\n\t\t}\n\n\t\tconst feature = this.getFeature(featureDependency.code)\n\t\tconst dependencies = feature.dependencies\n\n\t\tfor (let i = 0; i < dependencies.length; i += 1) {\n\t\t\tconst dependency = dependencies[i]\n\t\t\tif (!this.isDependencyInTracker(trackedFeatures, dependency)) {\n\t\t\t\tfeatures.push(dependency)\n\t\t\t\ttrackedFeatures.push(dependency)\n\t\t\t}\n\t\t}\n\n\t\tfor (let x = 0; x < dependencies.length; x += 1) {\n\t\t\tconst dependency = dependencies[x]\n\t\t\tlet dependencyDependencies = this.getFeatureDependenciesIncludingSelf(\n\t\t\t\tdependency,\n\t\t\t\ttrackedFeatures\n\t\t\t)\n\t\t\tif (!dependency.isRequired) {\n\t\t\t\tdependencyDependencies = dependencyDependencies.map((f) => ({\n\t\t\t\t\t...f,\n\t\t\t\t\tisRequired: false,\n\t\t\t\t}))\n\t\t\t}\n\n\t\t\tfeatures.push(...dependencyDependencies)\n\t\t}\n\n\t\treturn features\n\t}\n\n\tprivate isDependencyInTracker(\n\t\ttrackedFeatures: FeatureDependency[],\n\t\tdependency: FeatureDependency\n\t) {\n\t\treturn !!trackedFeatures.find((f) => f.code === dependency.code)\n\t}\n\n\tpublic async install(\n\t\toptions: InstallFeatureOptions\n\t): Promise<FeatureInstallResponse> {\n\t\tlet {\n\t\t\tfeatures,\n\t\t\tinstallFeatureDependencies = true,\n\t\t\tdidUpdateHandler,\n\t\t} = options\n\n\t\tconst shouldAllowEntertainment = !!features.find((f) => f.code === 'skill')\n\n\t\tif (\n\t\t\tFeatureInstallerImpl.startInFlightIntertainmentHandler &&\n\t\t\tshouldAllowEntertainment\n\t\t) {\n\t\t\tFeatureInstallerImpl.startInFlightIntertainmentHandler(\n\t\t\t\t(handler: InternalUpdateHandler) => {\n\t\t\t\t\tdidUpdateHandler = handler\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\n\t\tthis.pendingFeatureInstalls = {}\n\n\t\tlet results: FeatureInstallResponse = {}\n\n\t\tlet dependenciesToInstall: FeatureDependency[] = []\n\n\t\tfor (let i = 0; i < features.length; i += 1) {\n\t\t\tconst f = features[i]\n\t\t\tconst code = f.code\n\n\t\t\tdidUpdateHandler?.(`Checking if ${code} is installed...`)\n\n\t\t\tconst isInstalled = await this.isInstalled(code)\n\n\t\t\tif (!isInstalled && installFeatureDependencies) {\n\t\t\t\tdidUpdateHandler?.(`It is not, checking dependencies...`)\n\t\t\t\tdependenciesToInstall = dependenciesToInstall.concat(\n\t\t\t\t\tthis.getFeatureDependenciesIncludingSelf({ code, isRequired: true })\n\t\t\t\t)\n\t\t\t} else if (!isInstalled) {\n\t\t\t\tdependenciesToInstall.push({ code, isRequired: true })\n\t\t\t}\n\t\t}\n\n\t\tdependenciesToInstall = uniq(dependenciesToInstall)\n\t\tdependenciesToInstall = this.sortFeatures(dependenciesToInstall)\n\n\t\tfor (let i = 0; i < dependenciesToInstall.length; i += 1) {\n\t\t\tconst { code, isRequired } = dependenciesToInstall[i]\n\n\t\t\tconst isInstalled = await this.isInstalledOrPendingInstall(code)\n\n\t\t\tif (!isInstalled && isRequired) {\n\t\t\t\tconst installOptions =\n\t\t\t\t\t//@ts-ignore\n\t\t\t\t\toptions.features.find((f) => f.code === code)?.options\n\n\t\t\t\tconst installFeature = {\n\t\t\t\t\tcode: dependenciesToInstall[i].code,\n\t\t\t\t\toptions: installOptions,\n\t\t\t\t} as InstallFeature\n\n\t\t\t\tdidUpdateHandler?.(`Installing the ${installFeature.code} feature....`)\n\n\t\t\t\tconst installResults = await this.installFeature(\n\t\t\t\t\tinstallFeature,\n\t\t\t\t\tdidUpdateHandler\n\t\t\t\t)\n\n\t\t\t\tresults = merge(results, installResults)\n\t\t\t}\n\t\t}\n\n\t\tconst pendingResults = await this.installAllPending(didUpdateHandler)\n\t\tresults = merge(results, pendingResults)\n\n\t\tif (\n\t\t\tFeatureInstallerImpl.stopInFlightIntertainmentHandler &&\n\t\t\tshouldAllowEntertainment\n\t\t) {\n\t\t\tFeatureInstallerImpl.stopInFlightIntertainmentHandler()\n\t\t}\n\n\t\treturn results\n\t}\n\n\tprivate isInstalledOrPendingInstall(code: string) {\n\t\treturn this.pendingFeatureInstalls[code] || this.isInstalled(code as any)\n\t}\n\n\tprivate async installFeature(\n\t\tinstallFeature: InstallFeature,\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t): Promise<FeatureInstallResponse> {\n\t\tthis.pendingFeatureInstalls[installFeature.code] = true\n\n\t\tconst feature = this.getFeature(installFeature.code) as AbstractFeature\n\n\t\tif (feature.optionsSchema) {\n\t\t\t//@ts-ignore\n\t\t\tvalidateSchemaValues(feature.optionsSchema, installFeature.options ?? {})\n\t\t}\n\n\t\tdidUpdateHandler?.(`Running before package install hook...`)\n\t\tconst beforeInstallResults = await feature.beforePackageInstall(\n\t\t\t//@ts-ignore\n\t\t\tinstallFeature.options\n\t\t)\n\n\t\tif (beforeInstallResults.cwd) {\n\t\t\tthis.cwd = beforeInstallResults.cwd\n\t\t}\n\n\t\tdidUpdateHandler?.(`Installing package dependencies...`)\n\t\tconst packagesInstalled =\n\t\t\tawait this.queueInstallPackageDependenciesWithoutEntertainment(\n\t\t\t\tfeature,\n\t\t\t\tdidUpdateHandler\n\t\t\t)\n\n\t\tdidUpdateHandler?.(`Running after package install hook...`)\n\n\t\tthis.afterPackageInstalls.push(installFeature)\n\n\t\tif (!feature.isInstalled) {\n\t\t\tthis.featuresToMarkAsInstalled.push(feature.code)\n\t\t}\n\n\t\tconst files = [...(beforeInstallResults.files ?? [])]\n\n\t\treturn {\n\t\t\tfiles: files ?? undefined,\n\t\t\tpackagesInstalled,\n\t\t}\n\t}\n\n\tpublic async installPackageDependencies(\n\t\tfeature: AbstractFeature,\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t) {\n\t\treturn this.installPackageDependenciesForFeatures(\n\t\t\t[feature],\n\t\t\tdidUpdateHandler\n\t\t)\n\t}\n\n\tpublic async installPackageDependenciesForFeatures(\n\t\tfeatures: AbstractFeature[],\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t) {\n\t\tif (FeatureInstallerImpl.startInFlightIntertainmentHandler) {\n\t\t\tFeatureInstallerImpl.startInFlightIntertainmentHandler(\n\t\t\t\t(handler: InternalUpdateHandler) => {\n\t\t\t\t\tdidUpdateHandler = handler\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\n\t\tfor (const feature of features) {\n\t\t\tawait this.queueInstallPackageDependenciesWithoutEntertainment(\n\t\t\t\tfeature,\n\t\t\t\tdidUpdateHandler\n\t\t\t)\n\t\t}\n\n\t\tawait this.installAllPending(didUpdateHandler)\n\n\t\tif (FeatureInstallerImpl.stopInFlightIntertainmentHandler) {\n\t\t\tFeatureInstallerImpl.stopInFlightIntertainmentHandler()\n\t\t}\n\t}\n\n\tprivate async installAllPending(\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t): Promise<FeatureInstallResponse> {\n\t\tconst pkgService = this.Service('pkg')\n\n\t\tif (this.packagesToInstall.length > 0) {\n\t\t\tdidUpdateHandler?.(\n\t\t\t\t`Installing ${this.packagesToInstall.length} node module${\n\t\t\t\t\tthis.packagesToInstall.length === 1 ? '' : 's'\n\t\t\t\t}. Please be patient.`\n\t\t\t)\n\n\t\t\tawait pkgService.install(this.packagesToInstall, {})\n\t\t}\n\n\t\tif (this.devPackagesToInstall.length > 0) {\n\t\t\tdidUpdateHandler?.(\n\t\t\t\t`Now installing ${this.devPackagesToInstall.length} DEV node module${\n\t\t\t\t\tthis.devPackagesToInstall.length === 1 ? '' : 's'\n\t\t\t\t}. Please be patient.`\n\t\t\t)\n\n\t\t\tawait pkgService.install(this.devPackagesToInstall, {\n\t\t\t\tisDev: true,\n\t\t\t})\n\t\t}\n\n\t\tthis.packagesToInstall = []\n\t\tthis.devPackagesToInstall = []\n\n\t\tconst settings = this.Service('settings')\n\n\t\tfor (const code of this.featuresToMarkAsInstalled) {\n\t\t\tsettings.markAsInstalled(code)\n\t\t}\n\n\t\tthis.featuresToMarkAsInstalled = []\n\n\t\tlet results: FeatureInstallResponse = {}\n\n\t\tfor (const installFeature of this.afterPackageInstalls) {\n\t\t\tconst feature = this.getFeature(installFeature.code)\n\t\t\tconst afterInstallResults = await feature.afterPackageInstall(\n\t\t\t\t//@ts-ignore\n\t\t\t\tinstallFeature.options\n\t\t\t)\n\n\t\t\tresults = merge(results, afterInstallResults)\n\t\t}\n\n\t\treturn results\n\t}\n\n\tprivate async queueInstallPackageDependenciesWithoutEntertainment(\n\t\tfeature: AbstractFeature,\n\t\tdidUpdateHandler?: InternalUpdateHandler\n\t) {\n\t\tconst packagesInstalled: NpmPackage[] = []\n\t\tconst pkgService = this.Service('pkg')\n\n\t\tfeature.packageDependencies?.forEach((pkg) => {\n\t\t\tconst packageName = pkgService.buildPackageName(pkg)\n\n\t\t\tpackagesInstalled.push(pkg)\n\n\t\t\tdidUpdateHandler?.(`Checking node dependency: ${pkg.name}`)\n\n\t\t\tif (pkg.isDev && this.devPackagesToInstall.indexOf(packageName) === -1) {\n\t\t\t\tthis.devPackagesToInstall.push(packageName)\n\t\t\t} else if (\n\t\t\t\t!pkg.isDev &&\n\t\t\t\tthis.packagesToInstall.indexOf(packageName) === -1\n\t\t\t) {\n\t\t\t\tthis.packagesToInstall.push(packageName)\n\t\t\t}\n\t\t})\n\n\t\tif (this.packagesToInstall.length > 0) {\n\t\t\tdidUpdateHandler?.(\n\t\t\t\t`Queueing install of ${this.packagesToInstall.length} node dependenc${\n\t\t\t\t\tthis.packagesToInstall.length === 1\n\t\t\t\t\t\t? 'y.'\n\t\t\t\t\t\t: 'ies for ' + this.getFeatureNameAndDesc(feature) + '...'\n\t\t\t\t}.`\n\t\t\t)\n\t\t}\n\n\t\tif (this.devPackagesToInstall.length > 0) {\n\t\t\tdidUpdateHandler?.(\n\t\t\t\t`Queueing install of ${\n\t\t\t\t\tthis.devPackagesToInstall.length\n\t\t\t\t} DEV node dependenc${\n\t\t\t\t\tthis.devPackagesToInstall.length === 1\n\t\t\t\t\t\t? 'y.'\n\t\t\t\t\t\t: 'ies for ' + this.getFeatureNameAndDesc(feature) + '. 🤘'\n\t\t\t\t}.`\n\t\t\t)\n\t\t}\n\n\t\treturn packagesInstalled\n\t}\n\n\tprivate getFeatureNameAndDesc(feature: AbstractFeature) {\n\t\treturn `${feature.nameReadable}${\n\t\t\tfeature.description ? ' (' + feature.description + ')' : ''\n\t\t}`\n\t}\n\n\tprivate sortFeatures(\n\t\tfeatureDependencies: FeatureDependency[]\n\t): FeatureDependency[] {\n\t\treturn [...featureDependencies].sort((a, b) => {\n\t\t\tconst aFeature = this.getFeature(a.code)\n\t\t\tconst bFeature = this.getFeature(b.code)\n\n\t\t\tconst aDependsOnB = aFeature.dependencies.find((d) => d.code === b.code)\n\t\t\tconst bDependsOnA = bFeature.dependencies.find((d) => d.code === a.code)\n\n\t\t\tif (\n\t\t\t\taDependsOnB ||\n\t\t\t\taFeature.installOrderWeight < bFeature.installOrderWeight\n\t\t\t) {\n\t\t\t\treturn 1\n\t\t\t} else if (\n\t\t\t\tbDependsOnA ||\n\t\t\t\taFeature.installOrderWeight > bFeature.installOrderWeight\n\t\t\t) {\n\t\t\t\treturn -1\n\t\t\t}\n\t\t\treturn 0\n\t\t})\n\t}\n\n\tpublic Service<S extends Service>(type: S, cwd?: string): ServiceMap[S] {\n\t\treturn this.serviceFactory.Service(cwd ?? this.cwd, type)\n\t}\n\n\tpublic getOptionsForFeature(code: FeatureCode) {\n\t\treturn this.getFeature(code).optionsSchema\n\t}\n\n\tpublic getAllCodes(): FeatureCode[] {\n\t\tconst codes = Object.keys(this.featureMap) as FeatureCode[]\n\t\treturn this.sortFeatures(\n\t\t\tcodes.map((code) => ({ code, isRequired: true }))\n\t\t).map((dep) => dep.code)\n\t}\n\n\tpublic async getInstalledFeatures() {\n\t\tconst installed = await Promise.all(\n\t\t\tthis.getAllCodes().map(async (code) => {\n\t\t\t\tconst isInstalled = await this.isInstalled(code)\n\t\t\t\tif (isInstalled) {\n\t\t\t\t\treturn this.getFeature(code)\n\t\t\t\t}\n\n\t\t\t\treturn false\n\t\t\t})\n\t\t)\n\n\t\treturn installed.filter((f) => !!f) as FeatureMap[keyof FeatureMap][]\n\t}\n}\n\nexport default interface FeatureInstaller {\n\tisInstalled(code: FeatureCode): Promise<boolean>\n\tmarkAsSkippedThisRun(code: FeatureCode): void\n\tmarkAsPermanentlySkipped(code: FeatureCode): void\n\tisMarkedAsSkipped(code: FeatureCode): boolean\n\tgetFeature<C extends FeatureCode>(code: C): FeatureMap[C]\n\tareInstalled(codes: FeatureCode[]): Promise<boolean>\n\tinstall(options: InstallFeatureOptions): Promise<FeatureInstallResponse>\n\tgetInstalledFeatures(): Promise<FeatureMap[keyof FeatureMap][]>\n\tgetFeatureDependencies<C extends FeatureCode>(\n\t\tfeatureCode: C\n\t): FeatureDependency[]\n\tgetAllCodes(): FeatureCode[]\n\tmapFeature<C extends FeatureCode>(code: C, feature: FeatureMap[C]): void\n}\n"],"mappings":"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"}
|
|
@@ -9,14 +9,16 @@ import { FeatureCode } from './features.types';
|
|
|
9
9
|
export default class FeatureInstallerFactory {
|
|
10
10
|
private static readonly features;
|
|
11
11
|
static readonly featureCodes: FeatureCode[];
|
|
12
|
-
static WithAllFeatures(options:
|
|
13
|
-
cwd: string;
|
|
14
|
-
serviceFactory: ServiceFactory;
|
|
15
|
-
storeFactory: StoreFactory;
|
|
16
|
-
featureInstaller?: FeatureInstaller;
|
|
17
|
-
ui: GraphicsInterface;
|
|
18
|
-
emitter: GlobalEmitter;
|
|
19
|
-
apiClientFactory: ApiClientFactory;
|
|
20
|
-
actionExecuter: ActionExecuter;
|
|
21
|
-
}): FeatureInstaller;
|
|
12
|
+
static WithAllFeatures(options: InstallerWithAllFeaturesOptions): FeatureInstaller;
|
|
22
13
|
}
|
|
14
|
+
interface InstallerWithAllFeaturesOptions {
|
|
15
|
+
cwd: string;
|
|
16
|
+
serviceFactory: ServiceFactory;
|
|
17
|
+
storeFactory: StoreFactory;
|
|
18
|
+
featureInstaller?: FeatureInstaller;
|
|
19
|
+
ui: GraphicsInterface;
|
|
20
|
+
emitter: GlobalEmitter;
|
|
21
|
+
apiClientFactory: ApiClientFactory;
|
|
22
|
+
actionExecuter: ActionExecuter;
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
@@ -16,7 +16,7 @@ var _DeployFeature = _interopRequireDefault(require("./deploy/DeployFeature"));
|
|
|
16
16
|
var _ErrorFeature = _interopRequireDefault(require("./error/ErrorFeature"));
|
|
17
17
|
var _EventFeature = _interopRequireDefault(require("./event/EventFeature"));
|
|
18
18
|
var _EventContractFeature = _interopRequireDefault(require("./eventContract/EventContractFeature"));
|
|
19
|
-
var _FeatureInstaller =
|
|
19
|
+
var _FeatureInstaller = require("./FeatureInstaller");
|
|
20
20
|
var _LogFeature = _interopRequireDefault(require("./log/LogFeature"));
|
|
21
21
|
var _NodeFeature = _interopRequireDefault(require("./node/NodeFeature"));
|
|
22
22
|
var _OnboardFeature = _interopRequireDefault(require("./onboard/OnboardFeature"));
|
|
@@ -46,7 +46,7 @@ var FeatureInstallerFactory = /*#__PURE__*/function () {
|
|
|
46
46
|
ui = options.ui,
|
|
47
47
|
emitter = options.emitter,
|
|
48
48
|
actionExecuter = options.actionExecuter;
|
|
49
|
-
var featureInstaller = (_options$featureInsta = options.featureInstaller) !== null && _options$featureInsta !== void 0 ? _options$featureInsta : new _FeatureInstaller
|
|
49
|
+
var featureInstaller = (_options$featureInsta = options.featureInstaller) !== null && _options$featureInsta !== void 0 ? _options$featureInsta : new _FeatureInstaller.FeatureInstallerImpl(cwd, serviceFactory);
|
|
50
50
|
var featureOptions = {
|
|
51
51
|
cwd: cwd,
|
|
52
52
|
serviceFactory: serviceFactory,
|