@teambit/scripts 0.0.0-8bb313b592c7f751a2aec7b49ee093815a9d1be6 → 0.0.0-ce0b15b1a5b104399f16328c9caae26c5e667ae2
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/dist/script-definition.d.ts +5 -1
- package/dist/script-definition.js.map +1 -1
- package/dist/scripts.main.runtime.d.ts +12 -8
- package/dist/scripts.main.runtime.js +65 -10
- package/dist/scripts.main.runtime.js.map +1 -1
- package/package.json +9 -8
- package/script-definition.ts +7 -1
- package/scripts.main.runtime.ts +87 -18
- /package/dist/{preview-1759784959198.js → preview-1760465219160.js} +0 -0
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
import type { Component } from '@teambit/component';
|
|
2
|
+
export interface ScriptExecuteContext {
|
|
3
|
+
components: Component[];
|
|
4
|
+
}
|
|
5
|
+
export type ScriptHandler = string | ((context?: ScriptExecuteContext) => void | Promise<void>);
|
|
2
6
|
export interface ScriptDefinition {
|
|
3
7
|
name: string;
|
|
4
8
|
handler: ScriptHandler;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["script-definition.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"names":[],"sources":["script-definition.ts"],"sourcesContent":["import type { Component } from '@teambit/component';\n\nexport interface ScriptExecuteContext {\n components: Component[];\n}\n\nexport type ScriptHandler = string | ((context?: ScriptExecuteContext) => void | Promise<void>);\n\nexport interface ScriptDefinition {\n name: string;\n handler: ScriptHandler;\n}\n\nexport interface ScriptsMap {\n [scriptName: string]: ScriptHandler;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -3,12 +3,17 @@ import { ComponentMain } from '@teambit/component';
|
|
|
3
3
|
import type { EnvsMain } from '@teambit/envs';
|
|
4
4
|
import type { Logger, LoggerMain } from '@teambit/logger';
|
|
5
5
|
import type { Workspace } from '@teambit/workspace';
|
|
6
|
+
export interface ScriptsConfig {
|
|
7
|
+
envs?: string[];
|
|
8
|
+
}
|
|
6
9
|
export declare class ScriptsMain {
|
|
7
10
|
private workspace;
|
|
8
11
|
private envs;
|
|
9
12
|
private logger;
|
|
10
13
|
private componentAspect;
|
|
11
|
-
|
|
14
|
+
private config;
|
|
15
|
+
constructor(workspace: Workspace, envs: EnvsMain, logger: Logger, componentAspect: ComponentMain, config: ScriptsConfig);
|
|
16
|
+
private getConfigErrorMessage;
|
|
12
17
|
/**
|
|
13
18
|
* Run a script for all components
|
|
14
19
|
*/
|
|
@@ -17,6 +22,11 @@ export declare class ScriptsMain {
|
|
|
17
22
|
* List all available scripts from all environments
|
|
18
23
|
*/
|
|
19
24
|
listAllScripts(): Promise<string>;
|
|
25
|
+
/**
|
|
26
|
+
* Check if an env is allowed to run scripts based on config
|
|
27
|
+
* Supports exact match with or without version
|
|
28
|
+
*/
|
|
29
|
+
private isEnvAllowed;
|
|
20
30
|
private getComponents;
|
|
21
31
|
private groupComponentsByEnv;
|
|
22
32
|
private getScriptsFromEnv;
|
|
@@ -26,12 +36,6 @@ export declare class ScriptsMain {
|
|
|
26
36
|
static slots: never[];
|
|
27
37
|
static dependencies: import("@teambit/harmony").Aspect[];
|
|
28
38
|
static runtime: import("@teambit/harmony").RuntimeDefinition;
|
|
29
|
-
static provider([cli, workspace, envs, componentAspect, loggerMain]: [
|
|
30
|
-
CLIMain,
|
|
31
|
-
Workspace,
|
|
32
|
-
EnvsMain,
|
|
33
|
-
ComponentMain,
|
|
34
|
-
LoggerMain
|
|
35
|
-
]): Promise<ScriptsMain>;
|
|
39
|
+
static provider([cli, workspace, envs, componentAspect, loggerMain]: [CLIMain, Workspace, EnvsMain, ComponentMain, LoggerMain], config: ScriptsConfig): Promise<ScriptsMain>;
|
|
36
40
|
}
|
|
37
41
|
export default ScriptsMain;
|
|
@@ -93,24 +93,33 @@ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object
|
|
|
93
93
|
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
94
94
|
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
95
95
|
class ScriptsMain {
|
|
96
|
-
constructor(workspace, envs, logger, componentAspect) {
|
|
96
|
+
constructor(workspace, envs, logger, componentAspect, config) {
|
|
97
97
|
this.workspace = workspace;
|
|
98
98
|
this.envs = envs;
|
|
99
99
|
this.logger = logger;
|
|
100
100
|
this.componentAspect = componentAspect;
|
|
101
|
+
this.config = config;
|
|
102
|
+
}
|
|
103
|
+
getConfigErrorMessage() {
|
|
104
|
+
return _chalk().default.yellow('no envs configured. Add to workspace.jsonc:\n' + '{\n' + ' "teambit.workspace/scripts": {\n' + ' "envs": ["your-scope/your-env"]\n' + ' }\n' + '}');
|
|
101
105
|
}
|
|
102
106
|
|
|
103
107
|
/**
|
|
104
108
|
* Run a script for all components
|
|
105
109
|
*/
|
|
106
110
|
async runScript(scriptName) {
|
|
111
|
+
// Filter envs based on config
|
|
112
|
+
const allowedEnvs = this.config.envs || [];
|
|
113
|
+
if (allowedEnvs.length === 0) {
|
|
114
|
+
return this.getConfigErrorMessage();
|
|
115
|
+
}
|
|
107
116
|
const components = await this.getComponents();
|
|
108
117
|
if (!components.length) {
|
|
109
118
|
return _chalk().default.yellow('no components found');
|
|
110
119
|
}
|
|
111
120
|
|
|
112
|
-
// Group components by environment
|
|
113
|
-
const componentsByEnv = this.groupComponentsByEnv(components);
|
|
121
|
+
// Group components by environment, filtering only configured envs
|
|
122
|
+
const componentsByEnv = this.groupComponentsByEnv(components, allowedEnvs);
|
|
114
123
|
const results = [];
|
|
115
124
|
for (const [envId, envComponents] of Object.entries(componentsByEnv)) {
|
|
116
125
|
const env = this.envs.getEnvDefinitionByStringId(envId);
|
|
@@ -134,13 +143,20 @@ class ScriptsMain {
|
|
|
134
143
|
* List all available scripts from all environments
|
|
135
144
|
*/
|
|
136
145
|
async listAllScripts() {
|
|
146
|
+
// Filter envs based on config
|
|
147
|
+
const allowedEnvs = this.config.envs || [];
|
|
148
|
+
if (allowedEnvs.length === 0) {
|
|
149
|
+
return this.getConfigErrorMessage();
|
|
150
|
+
}
|
|
137
151
|
const components = await this.getComponents();
|
|
138
152
|
if (!components.length) {
|
|
139
153
|
return _chalk().default.yellow('no components found');
|
|
140
154
|
}
|
|
141
|
-
|
|
155
|
+
|
|
156
|
+
// Group components by environment, filtering only configured envs
|
|
157
|
+
const componentsByEnv = this.groupComponentsByEnv(components, allowedEnvs);
|
|
142
158
|
const results = [];
|
|
143
|
-
|
|
159
|
+
let foundAnyScripts = false;
|
|
144
160
|
for (const [envId, envComponents] of Object.entries(componentsByEnv)) {
|
|
145
161
|
const env = this.envs.getEnvDefinitionByStringId(envId);
|
|
146
162
|
if (!env) continue;
|
|
@@ -148,6 +164,10 @@ class ScriptsMain {
|
|
|
148
164
|
if (!scripts || scripts.isEmpty()) {
|
|
149
165
|
continue;
|
|
150
166
|
}
|
|
167
|
+
if (!foundAnyScripts) {
|
|
168
|
+
results.push(_chalk().default.green('Available scripts:\n'));
|
|
169
|
+
foundAnyScripts = true;
|
|
170
|
+
}
|
|
151
171
|
results.push(_chalk().default.cyan(`\nEnvironment: ${envId}`));
|
|
152
172
|
results.push(_chalk().default.gray(` (used by ${envComponents.length} component(s))`));
|
|
153
173
|
const scriptsList = scripts.list();
|
|
@@ -157,18 +177,50 @@ class ScriptsMain {
|
|
|
157
177
|
results.push(` ${_chalk().default.bold(scriptName)}: ${handlerStr}`);
|
|
158
178
|
});
|
|
159
179
|
}
|
|
180
|
+
if (!foundAnyScripts) {
|
|
181
|
+
return _chalk().default.yellow('no scripts defined in the configured environments');
|
|
182
|
+
}
|
|
160
183
|
return results.join('\n');
|
|
161
184
|
}
|
|
185
|
+
|
|
186
|
+
/**
|
|
187
|
+
* Check if an env is allowed to run scripts based on config
|
|
188
|
+
* Supports exact match with or without version
|
|
189
|
+
*/
|
|
190
|
+
isEnvAllowed(envId, allowedEnvs) {
|
|
191
|
+
return allowedEnvs.some(allowedEnv => {
|
|
192
|
+
// Exact match (with version): "my-scope/my-env@1.0.0" === "my-scope/my-env@1.0.0"
|
|
193
|
+
if (envId === allowedEnv) return true;
|
|
194
|
+
|
|
195
|
+
// If config has no version, match env without version part
|
|
196
|
+
// Config: "my-scope/my-env" should match "my-scope/my-env@1.0.0"
|
|
197
|
+
if (!allowedEnv.includes('@') && envId.startsWith(allowedEnv + '@')) {
|
|
198
|
+
return true;
|
|
199
|
+
}
|
|
200
|
+
return false;
|
|
201
|
+
});
|
|
202
|
+
}
|
|
162
203
|
async getComponents() {
|
|
163
204
|
const host = this.componentAspect.getHost();
|
|
164
205
|
if (!host) throw new Error('workspace not found');
|
|
165
206
|
return host.list();
|
|
166
207
|
}
|
|
167
|
-
groupComponentsByEnv(components) {
|
|
208
|
+
groupComponentsByEnv(components, allowedEnvs) {
|
|
168
209
|
const grouped = (0, _lodash().groupBy)(components, component => {
|
|
169
210
|
const env = this.envs.getOrCalculateEnv(component);
|
|
170
211
|
return env.id;
|
|
171
212
|
});
|
|
213
|
+
|
|
214
|
+
// If allowedEnvs is provided, filter out envs not in the list
|
|
215
|
+
if (allowedEnvs && allowedEnvs.length > 0) {
|
|
216
|
+
const filtered = {};
|
|
217
|
+
for (const [envId, envComponents] of Object.entries(grouped)) {
|
|
218
|
+
if (this.isEnvAllowed(envId, allowedEnvs)) {
|
|
219
|
+
filtered[envId] = envComponents;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
return filtered;
|
|
223
|
+
}
|
|
172
224
|
return grouped;
|
|
173
225
|
}
|
|
174
226
|
getScriptsFromEnv(env) {
|
|
@@ -197,18 +249,21 @@ class ScriptsMain {
|
|
|
197
249
|
return _chalk().default.red(`Error executing script: ${errorMsg}`);
|
|
198
250
|
}
|
|
199
251
|
}
|
|
200
|
-
async executeFunction(handler,
|
|
252
|
+
async executeFunction(handler, components) {
|
|
201
253
|
try {
|
|
202
|
-
|
|
254
|
+
const context = {
|
|
255
|
+
components
|
|
256
|
+
};
|
|
257
|
+
await handler(context);
|
|
203
258
|
return _chalk().default.green('✓ Script function executed successfully');
|
|
204
259
|
} catch (error) {
|
|
205
260
|
return _chalk().default.red(`Error executing script function: ${error.message}`);
|
|
206
261
|
}
|
|
207
262
|
}
|
|
208
|
-
static async provider([cli, workspace, envs, componentAspect, loggerMain]) {
|
|
263
|
+
static async provider([cli, workspace, envs, componentAspect, loggerMain], config) {
|
|
209
264
|
const logger = loggerMain.createLogger(_scripts().ScriptsAspect.id);
|
|
210
265
|
const scriptsService = new (_scripts2().ScriptsService)();
|
|
211
|
-
const scriptsMain = new ScriptsMain(workspace, envs, logger, componentAspect);
|
|
266
|
+
const scriptsMain = new ScriptsMain(workspace, envs, logger, componentAspect, config);
|
|
212
267
|
|
|
213
268
|
// Register service with envs
|
|
214
269
|
envs.registerService(scriptsService);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_cli","data","require","_component","_envs","_logger","_workspace","_chalk","_interopRequireDefault","_lodash","_child_process","_scripts","_scripts2","_script","_exceptions","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ScriptsMain","constructor","workspace","envs","logger","componentAspect","runScript","scriptName","components","getComponents","length","chalk","yellow","componentsByEnv","groupComponentsByEnv","results","envId","envComponents","entries","env","getEnvDefinitionByStringId","scripts","getScriptsFromEnv","has","ScriptNotFound","handler","get","title","green","push","result","executeScript","join","listAllScripts","isEmpty","cyan","gray","scriptsList","list","forEach","handlerStr","white","bold","host","getHost","Error","grouped","groupBy","component","getOrCalculateEnv","id","getScripts","undefined","executeShellCommand","executeFunction","command","output","execSync","cwd","path","encoding","stdio","error","errorMsg","stderr","message","red","_components","provider","cli","loggerMain","createLogger","ScriptsAspect","scriptsService","ScriptsService","scriptsMain","registerService","scriptCmd","ScriptCmd","register","exports","CLIAspect","WorkspaceAspect","EnvsAspect","ComponentAspect","LoggerAspect","MainRuntime","addRuntime","_default"],"sources":["scripts.main.runtime.ts"],"sourcesContent":["import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport type { Component } from '@teambit/component';\nimport { ComponentAspect, ComponentMain } from '@teambit/component';\nimport type { EnvsMain, EnvDefinition } from '@teambit/envs';\nimport { EnvsAspect } from '@teambit/envs';\nimport type { Logger, LoggerMain } from '@teambit/logger';\nimport { LoggerAspect } from '@teambit/logger';\nimport type { Workspace } from '@teambit/workspace';\nimport { WorkspaceAspect } from '@teambit/workspace';\nimport chalk from 'chalk';\nimport { groupBy } from 'lodash';\nimport { execSync } from 'child_process';\nimport { ScriptsAspect } from './scripts.aspect';\nimport { ScriptsService } from './scripts.service';\nimport { ScriptCmd } from './script.cmd';\nimport { ScriptNotFound } from './exceptions';\nimport type { Scripts } from './scripts';\nimport type { ScriptHandler } from './script-definition';\n\nexport class ScriptsMain {\n constructor(\n private workspace: Workspace,\n private envs: EnvsMain,\n private logger: Logger,\n private componentAspect: ComponentMain\n ) {}\n\n /**\n * Run a script for all components\n */\n async runScript(scriptName: string): Promise<string> {\n const components = await this.getComponents();\n if (!components.length) {\n return chalk.yellow('no components found');\n }\n\n // Group components by environment\n const componentsByEnv = this.groupComponentsByEnv(components);\n const results: string[] = [];\n\n for (const [envId, envComponents] of Object.entries(componentsByEnv)) {\n const env = this.envs.getEnvDefinitionByStringId(envId);\n if (!env) continue;\n\n const scripts = this.getScriptsFromEnv(env);\n if (!scripts) continue;\n\n if (!scripts.has(scriptName)) {\n throw new ScriptNotFound(scriptName, envId);\n }\n\n const handler = scripts.get(scriptName);\n if (!handler) continue;\n\n const title = chalk.green(\n `\\nRunning script \"${scriptName}\" for ${envComponents.length} component(s) with env ${envId}:`\n );\n results.push(title);\n\n const result = await this.executeScript(handler, envComponents);\n results.push(result);\n }\n\n return results.join('\\n');\n }\n\n /**\n * List all available scripts from all environments\n */\n async listAllScripts(): Promise<string> {\n const components = await this.getComponents();\n if (!components.length) {\n return chalk.yellow('no components found');\n }\n\n const componentsByEnv = this.groupComponentsByEnv(components);\n const results: string[] = [];\n\n results.push(chalk.green('Available scripts:\\n'));\n\n for (const [envId, envComponents] of Object.entries(componentsByEnv)) {\n const env = this.envs.getEnvDefinitionByStringId(envId);\n if (!env) continue;\n\n const scripts = this.getScriptsFromEnv(env);\n if (!scripts || scripts.isEmpty()) {\n continue;\n }\n\n results.push(chalk.cyan(`\\nEnvironment: ${envId}`));\n results.push(chalk.gray(` (used by ${envComponents.length} component(s))`));\n\n const scriptsList = scripts.list();\n scriptsList.forEach((scriptName) => {\n const handler = scripts.get(scriptName);\n const handlerStr = typeof handler === 'function' ? chalk.gray('[function]') : chalk.white(handler as string);\n results.push(` ${chalk.bold(scriptName)}: ${handlerStr}`);\n });\n }\n\n return results.join('\\n');\n }\n\n private async getComponents(): Promise<Component[]> {\n const host = this.componentAspect.getHost();\n if (!host) throw new Error('workspace not found');\n return host.list();\n }\n\n private groupComponentsByEnv(components: Component[]): Record<string, Component[]> {\n const grouped = groupBy(components, (component) => {\n const env = this.envs.getOrCalculateEnv(component);\n return env.id;\n });\n return grouped;\n }\n\n private getScriptsFromEnv(env: EnvDefinition): Scripts | undefined {\n if (!env.env.getScripts) return undefined;\n return env.env.getScripts();\n }\n\n private async executeScript(handler: ScriptHandler, components: Component[]): Promise<string> {\n if (typeof handler === 'string') {\n // Execute shell command\n return this.executeShellCommand(handler);\n }\n\n // Execute function\n return this.executeFunction(handler, components);\n }\n\n private executeShellCommand(command: string): string {\n try {\n const output = execSync(command, {\n cwd: this.workspace.path,\n encoding: 'utf-8',\n stdio: 'pipe',\n });\n return chalk.white(output);\n } catch (error: any) {\n const errorMsg = error.stderr || error.message || 'unknown error';\n return chalk.red(`Error executing script: ${errorMsg}`);\n }\n }\n\n private async executeFunction(handler: () => void | Promise<void>, _components: Component[]): Promise<string> {\n try {\n await handler();\n return chalk.green('✓ Script function executed successfully');\n } catch (error: any) {\n return chalk.red(`Error executing script function: ${error.message}`);\n }\n }\n\n static slots = [];\n\n static dependencies = [CLIAspect, WorkspaceAspect, EnvsAspect, ComponentAspect, LoggerAspect];\n\n static runtime = MainRuntime;\n\n static async provider([cli, workspace, envs, componentAspect, loggerMain]: [\n CLIMain,\n Workspace,\n EnvsMain,\n ComponentMain,\n LoggerMain,\n ]) {\n const logger = loggerMain.createLogger(ScriptsAspect.id);\n const scriptsService = new ScriptsService();\n const scriptsMain = new ScriptsMain(workspace, envs, logger, componentAspect);\n\n // Register service with envs\n envs.registerService(scriptsService);\n\n // Register CLI command\n const scriptCmd = new ScriptCmd(scriptsMain);\n cli.register(scriptCmd);\n\n return scriptsMain;\n }\n}\n\nScriptsAspect.addRuntime(ScriptsMain);\n\nexport default ScriptsMain;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_cli","data","require","_component","_envs","_logger","_workspace","_chalk","_interopRequireDefault","_lodash","_child_process","_scripts","_scripts2","_script","_exceptions","e","__esModule","default","_defineProperty","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","ScriptsMain","constructor","workspace","envs","logger","componentAspect","config","getConfigErrorMessage","chalk","yellow","runScript","scriptName","allowedEnvs","length","components","getComponents","componentsByEnv","groupComponentsByEnv","results","envId","envComponents","entries","env","getEnvDefinitionByStringId","scripts","getScriptsFromEnv","has","ScriptNotFound","handler","get","title","green","push","result","executeScript","join","listAllScripts","foundAnyScripts","isEmpty","cyan","gray","scriptsList","list","forEach","handlerStr","white","bold","isEnvAllowed","some","allowedEnv","includes","startsWith","host","getHost","Error","grouped","groupBy","component","getOrCalculateEnv","id","filtered","getScripts","undefined","executeShellCommand","executeFunction","command","output","execSync","cwd","path","encoding","stdio","error","errorMsg","stderr","message","red","context","provider","cli","loggerMain","createLogger","ScriptsAspect","scriptsService","ScriptsService","scriptsMain","registerService","scriptCmd","ScriptCmd","register","exports","CLIAspect","WorkspaceAspect","EnvsAspect","ComponentAspect","LoggerAspect","MainRuntime","addRuntime","_default"],"sources":["scripts.main.runtime.ts"],"sourcesContent":["import { CLIAspect, CLIMain, MainRuntime } from '@teambit/cli';\nimport type { Component } from '@teambit/component';\nimport { ComponentAspect, ComponentMain } from '@teambit/component';\nimport type { EnvsMain, EnvDefinition } from '@teambit/envs';\nimport { EnvsAspect } from '@teambit/envs';\nimport type { Logger, LoggerMain } from '@teambit/logger';\nimport { LoggerAspect } from '@teambit/logger';\nimport type { Workspace } from '@teambit/workspace';\nimport { WorkspaceAspect } from '@teambit/workspace';\nimport chalk from 'chalk';\nimport { groupBy } from 'lodash';\nimport { execSync } from 'child_process';\nimport { ScriptsAspect } from './scripts.aspect';\nimport { ScriptsService } from './scripts.service';\nimport { ScriptCmd } from './script.cmd';\nimport { ScriptNotFound } from './exceptions';\nimport type { Scripts } from './scripts';\nimport type { ScriptHandler, ScriptExecuteContext } from './script-definition';\n\nexport interface ScriptsConfig {\n envs?: string[];\n}\n\nexport class ScriptsMain {\n constructor(\n private workspace: Workspace,\n private envs: EnvsMain,\n private logger: Logger,\n private componentAspect: ComponentMain,\n private config: ScriptsConfig\n ) {}\n\n private getConfigErrorMessage(): string {\n return chalk.yellow(\n 'no envs configured. Add to workspace.jsonc:\\n' +\n '{\\n' +\n ' \"teambit.workspace/scripts\": {\\n' +\n ' \"envs\": [\"your-scope/your-env\"]\\n' +\n ' }\\n' +\n '}'\n );\n }\n\n /**\n * Run a script for all components\n */\n async runScript(scriptName: string): Promise<string> {\n // Filter envs based on config\n const allowedEnvs = this.config.envs || [];\n if (allowedEnvs.length === 0) {\n return this.getConfigErrorMessage();\n }\n\n const components = await this.getComponents();\n if (!components.length) {\n return chalk.yellow('no components found');\n }\n\n // Group components by environment, filtering only configured envs\n const componentsByEnv = this.groupComponentsByEnv(components, allowedEnvs);\n const results: string[] = [];\n\n for (const [envId, envComponents] of Object.entries(componentsByEnv)) {\n const env = this.envs.getEnvDefinitionByStringId(envId);\n if (!env) continue;\n\n const scripts = this.getScriptsFromEnv(env);\n if (!scripts) continue;\n\n if (!scripts.has(scriptName)) {\n throw new ScriptNotFound(scriptName, envId);\n }\n\n const handler = scripts.get(scriptName);\n if (!handler) continue;\n\n const title = chalk.green(\n `\\nRunning script \"${scriptName}\" for ${envComponents.length} component(s) with env ${envId}:`\n );\n results.push(title);\n\n const result = await this.executeScript(handler, envComponents);\n results.push(result);\n }\n\n return results.join('\\n');\n }\n\n /**\n * List all available scripts from all environments\n */\n async listAllScripts(): Promise<string> {\n // Filter envs based on config\n const allowedEnvs = this.config.envs || [];\n if (allowedEnvs.length === 0) {\n return this.getConfigErrorMessage();\n }\n\n const components = await this.getComponents();\n if (!components.length) {\n return chalk.yellow('no components found');\n }\n\n // Group components by environment, filtering only configured envs\n const componentsByEnv = this.groupComponentsByEnv(components, allowedEnvs);\n const results: string[] = [];\n let foundAnyScripts = false;\n\n for (const [envId, envComponents] of Object.entries(componentsByEnv)) {\n const env = this.envs.getEnvDefinitionByStringId(envId);\n if (!env) continue;\n\n const scripts = this.getScriptsFromEnv(env);\n if (!scripts || scripts.isEmpty()) {\n continue;\n }\n\n if (!foundAnyScripts) {\n results.push(chalk.green('Available scripts:\\n'));\n foundAnyScripts = true;\n }\n\n results.push(chalk.cyan(`\\nEnvironment: ${envId}`));\n results.push(chalk.gray(` (used by ${envComponents.length} component(s))`));\n\n const scriptsList = scripts.list();\n scriptsList.forEach((scriptName) => {\n const handler = scripts.get(scriptName);\n const handlerStr = typeof handler === 'function' ? chalk.gray('[function]') : chalk.white(handler as string);\n results.push(` ${chalk.bold(scriptName)}: ${handlerStr}`);\n });\n }\n\n if (!foundAnyScripts) {\n return chalk.yellow('no scripts defined in the configured environments');\n }\n\n return results.join('\\n');\n }\n\n /**\n * Check if an env is allowed to run scripts based on config\n * Supports exact match with or without version\n */\n private isEnvAllowed(envId: string, allowedEnvs: string[]): boolean {\n return allowedEnvs.some((allowedEnv) => {\n // Exact match (with version): \"my-scope/my-env@1.0.0\" === \"my-scope/my-env@1.0.0\"\n if (envId === allowedEnv) return true;\n\n // If config has no version, match env without version part\n // Config: \"my-scope/my-env\" should match \"my-scope/my-env@1.0.0\"\n if (!allowedEnv.includes('@') && envId.startsWith(allowedEnv + '@')) {\n return true;\n }\n\n return false;\n });\n }\n\n private async getComponents(): Promise<Component[]> {\n const host = this.componentAspect.getHost();\n if (!host) throw new Error('workspace not found');\n return host.list();\n }\n\n private groupComponentsByEnv(components: Component[], allowedEnvs?: string[]): Record<string, Component[]> {\n const grouped = groupBy(components, (component) => {\n const env = this.envs.getOrCalculateEnv(component);\n return env.id;\n });\n\n // If allowedEnvs is provided, filter out envs not in the list\n if (allowedEnvs && allowedEnvs.length > 0) {\n const filtered: Record<string, Component[]> = {};\n for (const [envId, envComponents] of Object.entries(grouped)) {\n if (this.isEnvAllowed(envId, allowedEnvs)) {\n filtered[envId] = envComponents;\n }\n }\n return filtered;\n }\n\n return grouped;\n }\n\n private getScriptsFromEnv(env: EnvDefinition): Scripts | undefined {\n if (!env.env.getScripts) return undefined;\n return env.env.getScripts();\n }\n\n private async executeScript(handler: ScriptHandler, components: Component[]): Promise<string> {\n if (typeof handler === 'string') {\n // Execute shell command\n return this.executeShellCommand(handler);\n }\n\n // Execute function\n return this.executeFunction(handler, components);\n }\n\n private executeShellCommand(command: string): string {\n try {\n const output = execSync(command, {\n cwd: this.workspace.path,\n encoding: 'utf-8',\n stdio: 'pipe',\n });\n return chalk.white(output);\n } catch (error: any) {\n const errorMsg = error.stderr || error.message || 'unknown error';\n return chalk.red(`Error executing script: ${errorMsg}`);\n }\n }\n\n private async executeFunction(\n handler: (context?: ScriptExecuteContext) => void | Promise<void>,\n components: Component[]\n ): Promise<string> {\n try {\n const context: ScriptExecuteContext = { components };\n await handler(context);\n return chalk.green('✓ Script function executed successfully');\n } catch (error: any) {\n return chalk.red(`Error executing script function: ${error.message}`);\n }\n }\n\n static slots = [];\n\n static dependencies = [CLIAspect, WorkspaceAspect, EnvsAspect, ComponentAspect, LoggerAspect];\n\n static runtime = MainRuntime;\n\n static async provider(\n [cli, workspace, envs, componentAspect, loggerMain]: [CLIMain, Workspace, EnvsMain, ComponentMain, LoggerMain],\n config: ScriptsConfig\n ) {\n const logger = loggerMain.createLogger(ScriptsAspect.id);\n const scriptsService = new ScriptsService();\n const scriptsMain = new ScriptsMain(workspace, envs, logger, componentAspect, config);\n\n // Register service with envs\n envs.registerService(scriptsService);\n\n // Register CLI command\n const scriptCmd = new ScriptCmd(scriptsMain);\n cli.register(scriptCmd);\n\n return scriptsMain;\n }\n}\n\nScriptsAspect.addRuntime(ScriptsMain);\n\nexport default ScriptsMain;\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teambit/scripts",
|
|
3
|
-
"version": "0.0.0-
|
|
3
|
+
"version": "0.0.0-ce0b15b1a5b104399f16328c9caae26c5e667ae2",
|
|
4
|
+
"homepage": "https://bit.cloud/teambit/workspace/scripts",
|
|
4
5
|
"main": "dist/index.js",
|
|
5
6
|
"componentId": {
|
|
7
|
+
"scope": "teambit.workspace",
|
|
6
8
|
"name": "scripts",
|
|
7
|
-
"version": "
|
|
8
|
-
"scope": "teambit.workspace"
|
|
9
|
+
"version": "ce0b15b1a5b104399f16328c9caae26c5e667ae2"
|
|
9
10
|
},
|
|
10
11
|
"dependencies": {
|
|
11
12
|
"chalk": "4.1.2",
|
|
12
13
|
"lodash": "4.17.21",
|
|
13
14
|
"core-js": "^3.0.0",
|
|
14
15
|
"@babel/runtime": "7.20.0",
|
|
15
|
-
"@teambit/cli": "0.0.
|
|
16
|
+
"@teambit/cli": "0.0.1282",
|
|
16
17
|
"@teambit/harmony": "0.4.7",
|
|
17
|
-
"@teambit/logger": "0.0.
|
|
18
|
+
"@teambit/logger": "0.0.1375",
|
|
18
19
|
"@teambit/bit-error": "0.0.404",
|
|
19
|
-
"@teambit/component": "0.0.0-
|
|
20
|
-
"@teambit/envs": "0.0.0-
|
|
21
|
-
"@teambit/workspace": "0.0.0-
|
|
20
|
+
"@teambit/component": "0.0.0-fd5ba37ee0522a4bb5c2e4fa2d82093635ac76c4",
|
|
21
|
+
"@teambit/envs": "0.0.0-419b70101192b11c6825df02d90633de883422be",
|
|
22
|
+
"@teambit/workspace": "0.0.0-41f320a6bf12ef6e4b7d7b3104da33c2472fe419"
|
|
22
23
|
},
|
|
23
24
|
"devDependencies": {
|
|
24
25
|
"@types/lodash": "4.14.165",
|
package/script-definition.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
import type { Component } from '@teambit/component';
|
|
2
|
+
|
|
3
|
+
export interface ScriptExecuteContext {
|
|
4
|
+
components: Component[];
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export type ScriptHandler = string | ((context?: ScriptExecuteContext) => void | Promise<void>);
|
|
2
8
|
|
|
3
9
|
export interface ScriptDefinition {
|
|
4
10
|
name: string;
|
package/scripts.main.runtime.ts
CHANGED
|
@@ -15,27 +15,49 @@ import { ScriptsService } from './scripts.service';
|
|
|
15
15
|
import { ScriptCmd } from './script.cmd';
|
|
16
16
|
import { ScriptNotFound } from './exceptions';
|
|
17
17
|
import type { Scripts } from './scripts';
|
|
18
|
-
import type { ScriptHandler } from './script-definition';
|
|
18
|
+
import type { ScriptHandler, ScriptExecuteContext } from './script-definition';
|
|
19
|
+
|
|
20
|
+
export interface ScriptsConfig {
|
|
21
|
+
envs?: string[];
|
|
22
|
+
}
|
|
19
23
|
|
|
20
24
|
export class ScriptsMain {
|
|
21
25
|
constructor(
|
|
22
26
|
private workspace: Workspace,
|
|
23
27
|
private envs: EnvsMain,
|
|
24
28
|
private logger: Logger,
|
|
25
|
-
private componentAspect: ComponentMain
|
|
29
|
+
private componentAspect: ComponentMain,
|
|
30
|
+
private config: ScriptsConfig
|
|
26
31
|
) {}
|
|
27
32
|
|
|
33
|
+
private getConfigErrorMessage(): string {
|
|
34
|
+
return chalk.yellow(
|
|
35
|
+
'no envs configured. Add to workspace.jsonc:\n' +
|
|
36
|
+
'{\n' +
|
|
37
|
+
' "teambit.workspace/scripts": {\n' +
|
|
38
|
+
' "envs": ["your-scope/your-env"]\n' +
|
|
39
|
+
' }\n' +
|
|
40
|
+
'}'
|
|
41
|
+
);
|
|
42
|
+
}
|
|
43
|
+
|
|
28
44
|
/**
|
|
29
45
|
* Run a script for all components
|
|
30
46
|
*/
|
|
31
47
|
async runScript(scriptName: string): Promise<string> {
|
|
48
|
+
// Filter envs based on config
|
|
49
|
+
const allowedEnvs = this.config.envs || [];
|
|
50
|
+
if (allowedEnvs.length === 0) {
|
|
51
|
+
return this.getConfigErrorMessage();
|
|
52
|
+
}
|
|
53
|
+
|
|
32
54
|
const components = await this.getComponents();
|
|
33
55
|
if (!components.length) {
|
|
34
56
|
return chalk.yellow('no components found');
|
|
35
57
|
}
|
|
36
58
|
|
|
37
|
-
// Group components by environment
|
|
38
|
-
const componentsByEnv = this.groupComponentsByEnv(components);
|
|
59
|
+
// Group components by environment, filtering only configured envs
|
|
60
|
+
const componentsByEnv = this.groupComponentsByEnv(components, allowedEnvs);
|
|
39
61
|
const results: string[] = [];
|
|
40
62
|
|
|
41
63
|
for (const [envId, envComponents] of Object.entries(componentsByEnv)) {
|
|
@@ -68,15 +90,21 @@ export class ScriptsMain {
|
|
|
68
90
|
* List all available scripts from all environments
|
|
69
91
|
*/
|
|
70
92
|
async listAllScripts(): Promise<string> {
|
|
93
|
+
// Filter envs based on config
|
|
94
|
+
const allowedEnvs = this.config.envs || [];
|
|
95
|
+
if (allowedEnvs.length === 0) {
|
|
96
|
+
return this.getConfigErrorMessage();
|
|
97
|
+
}
|
|
98
|
+
|
|
71
99
|
const components = await this.getComponents();
|
|
72
100
|
if (!components.length) {
|
|
73
101
|
return chalk.yellow('no components found');
|
|
74
102
|
}
|
|
75
103
|
|
|
76
|
-
|
|
104
|
+
// Group components by environment, filtering only configured envs
|
|
105
|
+
const componentsByEnv = this.groupComponentsByEnv(components, allowedEnvs);
|
|
77
106
|
const results: string[] = [];
|
|
78
|
-
|
|
79
|
-
results.push(chalk.green('Available scripts:\n'));
|
|
107
|
+
let foundAnyScripts = false;
|
|
80
108
|
|
|
81
109
|
for (const [envId, envComponents] of Object.entries(componentsByEnv)) {
|
|
82
110
|
const env = this.envs.getEnvDefinitionByStringId(envId);
|
|
@@ -87,6 +115,11 @@ export class ScriptsMain {
|
|
|
87
115
|
continue;
|
|
88
116
|
}
|
|
89
117
|
|
|
118
|
+
if (!foundAnyScripts) {
|
|
119
|
+
results.push(chalk.green('Available scripts:\n'));
|
|
120
|
+
foundAnyScripts = true;
|
|
121
|
+
}
|
|
122
|
+
|
|
90
123
|
results.push(chalk.cyan(`\nEnvironment: ${envId}`));
|
|
91
124
|
results.push(chalk.gray(` (used by ${envComponents.length} component(s))`));
|
|
92
125
|
|
|
@@ -98,20 +131,55 @@ export class ScriptsMain {
|
|
|
98
131
|
});
|
|
99
132
|
}
|
|
100
133
|
|
|
134
|
+
if (!foundAnyScripts) {
|
|
135
|
+
return chalk.yellow('no scripts defined in the configured environments');
|
|
136
|
+
}
|
|
137
|
+
|
|
101
138
|
return results.join('\n');
|
|
102
139
|
}
|
|
103
140
|
|
|
141
|
+
/**
|
|
142
|
+
* Check if an env is allowed to run scripts based on config
|
|
143
|
+
* Supports exact match with or without version
|
|
144
|
+
*/
|
|
145
|
+
private isEnvAllowed(envId: string, allowedEnvs: string[]): boolean {
|
|
146
|
+
return allowedEnvs.some((allowedEnv) => {
|
|
147
|
+
// Exact match (with version): "my-scope/my-env@1.0.0" === "my-scope/my-env@1.0.0"
|
|
148
|
+
if (envId === allowedEnv) return true;
|
|
149
|
+
|
|
150
|
+
// If config has no version, match env without version part
|
|
151
|
+
// Config: "my-scope/my-env" should match "my-scope/my-env@1.0.0"
|
|
152
|
+
if (!allowedEnv.includes('@') && envId.startsWith(allowedEnv + '@')) {
|
|
153
|
+
return true;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
return false;
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
|
|
104
160
|
private async getComponents(): Promise<Component[]> {
|
|
105
161
|
const host = this.componentAspect.getHost();
|
|
106
162
|
if (!host) throw new Error('workspace not found');
|
|
107
163
|
return host.list();
|
|
108
164
|
}
|
|
109
165
|
|
|
110
|
-
private groupComponentsByEnv(components: Component[]): Record<string, Component[]> {
|
|
166
|
+
private groupComponentsByEnv(components: Component[], allowedEnvs?: string[]): Record<string, Component[]> {
|
|
111
167
|
const grouped = groupBy(components, (component) => {
|
|
112
168
|
const env = this.envs.getOrCalculateEnv(component);
|
|
113
169
|
return env.id;
|
|
114
170
|
});
|
|
171
|
+
|
|
172
|
+
// If allowedEnvs is provided, filter out envs not in the list
|
|
173
|
+
if (allowedEnvs && allowedEnvs.length > 0) {
|
|
174
|
+
const filtered: Record<string, Component[]> = {};
|
|
175
|
+
for (const [envId, envComponents] of Object.entries(grouped)) {
|
|
176
|
+
if (this.isEnvAllowed(envId, allowedEnvs)) {
|
|
177
|
+
filtered[envId] = envComponents;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return filtered;
|
|
181
|
+
}
|
|
182
|
+
|
|
115
183
|
return grouped;
|
|
116
184
|
}
|
|
117
185
|
|
|
@@ -144,9 +212,13 @@ export class ScriptsMain {
|
|
|
144
212
|
}
|
|
145
213
|
}
|
|
146
214
|
|
|
147
|
-
private async executeFunction(
|
|
215
|
+
private async executeFunction(
|
|
216
|
+
handler: (context?: ScriptExecuteContext) => void | Promise<void>,
|
|
217
|
+
components: Component[]
|
|
218
|
+
): Promise<string> {
|
|
148
219
|
try {
|
|
149
|
-
|
|
220
|
+
const context: ScriptExecuteContext = { components };
|
|
221
|
+
await handler(context);
|
|
150
222
|
return chalk.green('✓ Script function executed successfully');
|
|
151
223
|
} catch (error: any) {
|
|
152
224
|
return chalk.red(`Error executing script function: ${error.message}`);
|
|
@@ -159,16 +231,13 @@ export class ScriptsMain {
|
|
|
159
231
|
|
|
160
232
|
static runtime = MainRuntime;
|
|
161
233
|
|
|
162
|
-
static async provider(
|
|
163
|
-
CLIMain,
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
ComponentMain,
|
|
167
|
-
LoggerMain,
|
|
168
|
-
]) {
|
|
234
|
+
static async provider(
|
|
235
|
+
[cli, workspace, envs, componentAspect, loggerMain]: [CLIMain, Workspace, EnvsMain, ComponentMain, LoggerMain],
|
|
236
|
+
config: ScriptsConfig
|
|
237
|
+
) {
|
|
169
238
|
const logger = loggerMain.createLogger(ScriptsAspect.id);
|
|
170
239
|
const scriptsService = new ScriptsService();
|
|
171
|
-
const scriptsMain = new ScriptsMain(workspace, envs, logger, componentAspect);
|
|
240
|
+
const scriptsMain = new ScriptsMain(workspace, envs, logger, componentAspect, config);
|
|
172
241
|
|
|
173
242
|
// Register service with envs
|
|
174
243
|
envs.registerService(scriptsService);
|
|
File without changes
|