@breadstone-infrastructure/nx-tasks 0.0.231 → 0.0.232
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/executors/doppler-config-sync/executor.task.d.ts.map +1 -1
- package/executors/doppler-config-sync/executor.task.js +37 -18
- package/executors/doppler-config-sync/executor.task.js.map +1 -1
- package/executors/doppler-vercel-sync/executor.d.ts +11 -0
- package/executors/doppler-vercel-sync/executor.d.ts.map +1 -0
- package/executors/doppler-vercel-sync/executor.js +71 -0
- package/executors/doppler-vercel-sync/executor.js.map +1 -0
- package/executors/doppler-vercel-sync/executor.options.d.ts +8 -0
- package/executors/doppler-vercel-sync/executor.options.d.ts.map +1 -0
- package/executors/doppler-vercel-sync/executor.options.js +4 -0
- package/executors/doppler-vercel-sync/executor.options.js.map +1 -0
- package/executors/doppler-vercel-sync/executor.task.d.ts +30 -0
- package/executors/doppler-vercel-sync/executor.task.d.ts.map +1 -0
- package/executors/doppler-vercel-sync/executor.task.js +522 -0
- package/executors/doppler-vercel-sync/executor.task.js.map +1 -0
- package/executors/doppler-vercel-sync/schema.json +95 -0
- package/executors/generate-package-docs/executor.d.ts +6 -0
- package/executors/generate-package-docs/executor.d.ts.map +1 -0
- package/executors/generate-package-docs/executor.js +72 -0
- package/executors/generate-package-docs/executor.js.map +1 -0
- package/executors/generate-package-docs/executor.options.d.ts +6 -0
- package/executors/generate-package-docs/executor.options.d.ts.map +1 -0
- package/executors/generate-package-docs/executor.options.js +4 -0
- package/executors/generate-package-docs/executor.options.js.map +1 -0
- package/executors/generate-package-docs/executor.task.d.ts +103 -0
- package/executors/generate-package-docs/executor.task.d.ts.map +1 -0
- package/executors/generate-package-docs/executor.task.js +259 -0
- package/executors/generate-package-docs/executor.task.js.map +1 -0
- package/executors/generate-package-docs/schema.json +258 -0
- package/executors/icon-collection-builder/executor.d.ts.map +1 -1
- package/executors/icon-collection-builder/executor.js +3 -2
- package/executors/icon-collection-builder/executor.js.map +1 -1
- package/executors/icon-collection-builder/executor.task.d.ts +1 -0
- package/executors/icon-collection-builder/executor.task.d.ts.map +1 -1
- package/executors/icon-collection-builder/executor.task.js +73 -11
- package/executors/icon-collection-builder/executor.task.js.map +1 -1
- package/executors/icon-collection-builder/svg.d.ts +19 -0
- package/executors/icon-collection-builder/svg.d.ts.map +1 -1
- package/executors/icon-collection-builder/svg.js +106 -0
- package/executors/icon-collection-builder/svg.js.map +1 -1
- package/executors/icon-collection-downloader/executor.d.ts.map +1 -1
- package/executors/icon-collection-downloader/executor.js +3 -2
- package/executors/icon-collection-downloader/executor.js.map +1 -1
- package/executors/icon-collection-downloader/executor.task.d.ts +2 -0
- package/executors/icon-collection-downloader/executor.task.d.ts.map +1 -1
- package/executors/icon-collection-downloader/executor.task.js +130 -15
- package/executors/icon-collection-downloader/executor.task.js.map +1 -1
- package/executors/lit-docs/ComponentDocFixer.d.ts +176 -0
- package/executors/lit-docs/ComponentDocFixer.d.ts.map +1 -0
- package/executors/lit-docs/ComponentDocFixer.js +424 -0
- package/executors/lit-docs/ComponentDocFixer.js.map +1 -0
- package/executors/lit-docs/JSDocFixer.d.ts +97 -0
- package/executors/lit-docs/JSDocFixer.d.ts.map +1 -0
- package/executors/lit-docs/JSDocFixer.js +200 -0
- package/executors/lit-docs/JSDocFixer.js.map +1 -0
- package/executors/lit-docs/executor.d.ts.map +1 -1
- package/executors/lit-docs/executor.js +2 -1
- package/executors/lit-docs/executor.js.map +1 -1
- package/executors/lit-docs/executor.task.d.ts +1 -0
- package/executors/lit-docs/executor.task.d.ts.map +1 -1
- package/executors/lit-docs/executor.task.js +71 -24
- package/executors/lit-docs/executor.task.js.map +1 -1
- package/executors/lit-style-transform/executor.js +1 -1
- package/executors/lit-style-transform/executor.js.map +1 -1
- package/executors/prisma-seeds/executor.options.d.ts +1 -1
- package/executors/prisma-seeds/executor.task.d.ts +1 -1
- package/executors/secrets-config-sync/executor.d.ts +11 -0
- package/executors/secrets-config-sync/executor.d.ts.map +1 -0
- package/executors/secrets-config-sync/executor.js +64 -0
- package/executors/secrets-config-sync/executor.js.map +1 -0
- package/executors/secrets-config-sync/executor.options.d.ts +6 -0
- package/executors/secrets-config-sync/executor.options.d.ts.map +1 -0
- package/executors/secrets-config-sync/executor.options.js +4 -0
- package/executors/secrets-config-sync/executor.options.js.map +1 -0
- package/executors/secrets-config-sync/executor.task.d.ts +14 -0
- package/executors/secrets-config-sync/executor.task.d.ts.map +1 -0
- package/executors/secrets-config-sync/executor.task.js +157 -0
- package/executors/secrets-config-sync/executor.task.js.map +1 -0
- package/executors/secrets-config-sync/providers/azure-keyvault.provider.d.ts +42 -0
- package/executors/secrets-config-sync/providers/azure-keyvault.provider.d.ts.map +1 -0
- package/executors/secrets-config-sync/providers/azure-keyvault.provider.js +120 -0
- package/executors/secrets-config-sync/providers/azure-keyvault.provider.js.map +1 -0
- package/executors/secrets-config-sync/providers/doppler.provider.d.ts +18 -0
- package/executors/secrets-config-sync/providers/doppler.provider.d.ts.map +1 -0
- package/executors/secrets-config-sync/providers/doppler.provider.js +53 -0
- package/executors/secrets-config-sync/providers/doppler.provider.js.map +1 -0
- package/executors/secrets-config-sync/providers/secrets-provider.factory.d.ts +17 -0
- package/executors/secrets-config-sync/providers/secrets-provider.factory.d.ts.map +1 -0
- package/executors/secrets-config-sync/providers/secrets-provider.factory.js +25 -0
- package/executors/secrets-config-sync/providers/secrets-provider.factory.js.map +1 -0
- package/executors/secrets-config-sync/providers/secrets-provider.interface.d.ts +28 -0
- package/executors/secrets-config-sync/providers/secrets-provider.interface.d.ts.map +1 -0
- package/executors/secrets-config-sync/providers/secrets-provider.interface.js +4 -0
- package/executors/secrets-config-sync/providers/secrets-provider.interface.js.map +1 -0
- package/executors/secrets-config-sync/schema.json +44 -0
- package/executors/secrets-vercel-sync/executor.d.ts +11 -0
- package/executors/secrets-vercel-sync/executor.d.ts.map +1 -0
- package/executors/secrets-vercel-sync/executor.js +74 -0
- package/executors/secrets-vercel-sync/executor.js.map +1 -0
- package/executors/secrets-vercel-sync/executor.options.d.ts +8 -0
- package/executors/secrets-vercel-sync/executor.options.d.ts.map +1 -0
- package/executors/secrets-vercel-sync/executor.options.js +4 -0
- package/executors/secrets-vercel-sync/executor.options.js.map +1 -0
- package/executors/secrets-vercel-sync/executor.task.d.ts +34 -0
- package/executors/secrets-vercel-sync/executor.task.d.ts.map +1 -0
- package/executors/secrets-vercel-sync/executor.task.js +492 -0
- package/executors/secrets-vercel-sync/executor.task.js.map +1 -0
- package/executors/secrets-vercel-sync/providers/azure-keyvault.provider.d.ts +42 -0
- package/executors/secrets-vercel-sync/providers/azure-keyvault.provider.d.ts.map +1 -0
- package/executors/secrets-vercel-sync/providers/azure-keyvault.provider.js +118 -0
- package/executors/secrets-vercel-sync/providers/azure-keyvault.provider.js.map +1 -0
- package/executors/secrets-vercel-sync/providers/doppler.provider.d.ts +18 -0
- package/executors/secrets-vercel-sync/providers/doppler.provider.d.ts.map +1 -0
- package/executors/secrets-vercel-sync/providers/doppler.provider.js +61 -0
- package/executors/secrets-vercel-sync/providers/doppler.provider.js.map +1 -0
- package/executors/secrets-vercel-sync/providers/secrets-provider.factory.d.ts +17 -0
- package/executors/secrets-vercel-sync/providers/secrets-provider.factory.d.ts.map +1 -0
- package/executors/secrets-vercel-sync/providers/secrets-provider.factory.js +25 -0
- package/executors/secrets-vercel-sync/providers/secrets-provider.factory.js.map +1 -0
- package/executors/secrets-vercel-sync/providers/secrets-provider.interface.d.ts +28 -0
- package/executors/secrets-vercel-sync/providers/secrets-provider.interface.d.ts.map +1 -0
- package/executors/secrets-vercel-sync/providers/secrets-provider.interface.js +4 -0
- package/executors/secrets-vercel-sync/providers/secrets-provider.interface.js.map +1 -0
- package/executors/secrets-vercel-sync/schema.json +112 -0
- package/executors/token-linter/executor.options.d.ts +1 -1
- package/executors/token-linter/executor.task.d.ts +1 -1
- package/executors/token-linter/schema.json +1 -1
- package/executors.json +40 -30
- package/index.d.ts +4 -3
- package/index.d.ts.map +1 -1
- package/index.js +41 -39
- package/index.js.map +1 -1
- package/package.json +21 -19
- package/utils/markdown-processing.d.ts +43 -0
- package/utils/markdown-processing.d.ts.map +1 -0
- package/utils/markdown-processing.js +186 -0
- package/utils/markdown-processing.js.map +1 -0
- package/utils/valid-html-tags.d.ts +6 -0
- package/utils/valid-html-tags.d.ts.map +1 -0
- package/utils/valid-html-tags.js +83 -0
- package/utils/valid-html-tags.js.map +1 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// #region Imports
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.AzureKeyVaultSecretsProvider = void 0;
|
|
5
|
+
const enquirer_1 = require("enquirer");
|
|
6
|
+
// #endregion
|
|
7
|
+
/**
|
|
8
|
+
* Secrets provider implementation for Azure Key Vault.
|
|
9
|
+
*
|
|
10
|
+
* Uses the Key Vault REST API with a Bearer token (e.g. from `az account get-access-token`
|
|
11
|
+
* or a service principal client credential flow). The token must be provided via `apiKey`
|
|
12
|
+
* or entered interactively.
|
|
13
|
+
*
|
|
14
|
+
* @public
|
|
15
|
+
*/
|
|
16
|
+
class AzureKeyVaultSecretsProvider {
|
|
17
|
+
// #region Methods
|
|
18
|
+
/**
|
|
19
|
+
* @inheritdoc
|
|
20
|
+
*/
|
|
21
|
+
async authenticate(apiKey, interactive) {
|
|
22
|
+
if (apiKey) {
|
|
23
|
+
return apiKey;
|
|
24
|
+
}
|
|
25
|
+
const envToken = process.env['AZURE_KEYVAULT_TOKEN'];
|
|
26
|
+
if (envToken) {
|
|
27
|
+
return envToken;
|
|
28
|
+
}
|
|
29
|
+
if (interactive) {
|
|
30
|
+
const credentials = await (0, enquirer_1.prompt)([
|
|
31
|
+
{
|
|
32
|
+
type: 'input',
|
|
33
|
+
name: 'token',
|
|
34
|
+
message: 'Enter your Azure Key Vault access token:\nYou can obtain one via `az account get-access-token --resource https://vault.azure.net --query accessToken -o tsv`.'
|
|
35
|
+
}
|
|
36
|
+
]);
|
|
37
|
+
if (!credentials.token) {
|
|
38
|
+
throw new Error('No Azure Key Vault access token provided. Aborting.');
|
|
39
|
+
}
|
|
40
|
+
return credentials.token;
|
|
41
|
+
}
|
|
42
|
+
throw new Error('AZURE_KEYVAULT_TOKEN environment variable is not set. Set it to an Azure Key Vault access token, or enable interactive mode.');
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Fetches all secrets from an Azure Key Vault.
|
|
46
|
+
*
|
|
47
|
+
* The `project` and `config` parameters are ignored. The vault is identified
|
|
48
|
+
* solely by `vaultUrl`.
|
|
49
|
+
*
|
|
50
|
+
* @inheritdoc
|
|
51
|
+
*/
|
|
52
|
+
async fetchSecrets(token, _project, _config, logger, vaultUrl) {
|
|
53
|
+
if (!vaultUrl) {
|
|
54
|
+
throw new Error('vaultUrl is required for the azure-keyvault provider.');
|
|
55
|
+
}
|
|
56
|
+
const normalizedVaultUrl = vaultUrl.endsWith('/') ? vaultUrl.slice(0, -1) : vaultUrl;
|
|
57
|
+
const secrets = {};
|
|
58
|
+
// Step 1: List all secrets (paged)
|
|
59
|
+
const secretItems = await this.listSecrets(token, normalizedVaultUrl);
|
|
60
|
+
logger.log(` Found ${secretItems.length} secrets in Key Vault.`);
|
|
61
|
+
// Step 2: Fetch each secret value
|
|
62
|
+
for (const item of secretItems) {
|
|
63
|
+
const secretName = this.extractSecretName(item.id);
|
|
64
|
+
const value = await this.getSecretValue(token, normalizedVaultUrl, secretName);
|
|
65
|
+
secrets[secretName] = value;
|
|
66
|
+
}
|
|
67
|
+
logger.log(` Fetched ${Object.keys(secrets).length} secrets from Azure Key Vault [${normalizedVaultUrl}].`);
|
|
68
|
+
return secrets;
|
|
69
|
+
}
|
|
70
|
+
// #endregion
|
|
71
|
+
// #region Private Methods
|
|
72
|
+
/**
|
|
73
|
+
* Lists all secrets in the vault (handles pagination).
|
|
74
|
+
*/
|
|
75
|
+
async listSecrets(token, vaultUrl) {
|
|
76
|
+
const allItems = [];
|
|
77
|
+
let nextLink = `${vaultUrl}/secrets?api-version=7.4`;
|
|
78
|
+
while (nextLink) {
|
|
79
|
+
const response = await fetch(nextLink, {
|
|
80
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
81
|
+
});
|
|
82
|
+
if (!response.ok) {
|
|
83
|
+
throw new Error(`Failed to list Azure Key Vault secrets (HTTP ${response.status}): ${response.statusText}`);
|
|
84
|
+
}
|
|
85
|
+
const data = await response.json();
|
|
86
|
+
const enabledItems = data.value.filter(item => item.attributes.enabled);
|
|
87
|
+
allItems.push(...enabledItems);
|
|
88
|
+
nextLink = data.nextLink;
|
|
89
|
+
}
|
|
90
|
+
return allItems;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Fetches the current value of a single secret.
|
|
94
|
+
*/
|
|
95
|
+
async getSecretValue(token, vaultUrl, secretName) {
|
|
96
|
+
const url = `${vaultUrl}/secrets/${encodeURIComponent(secretName)}?api-version=7.4`;
|
|
97
|
+
const response = await fetch(url, {
|
|
98
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
99
|
+
});
|
|
100
|
+
if (!response.ok) {
|
|
101
|
+
throw new Error(`Failed to fetch Azure Key Vault secret "${secretName}" (HTTP ${response.status}): ${response.statusText}`);
|
|
102
|
+
}
|
|
103
|
+
const data = await response.json();
|
|
104
|
+
return data.value;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Extracts the secret name from a Key Vault secret ID URL.
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* `https://my-vault.vault.azure.net/secrets/MY_SECRET` → `MY_SECRET`
|
|
111
|
+
*/
|
|
112
|
+
extractSecretName(secretId) {
|
|
113
|
+
const parts = secretId.split('/');
|
|
114
|
+
return parts[parts.length - 1];
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
exports.AzureKeyVaultSecretsProvider = AzureKeyVaultSecretsProvider;
|
|
118
|
+
//# sourceMappingURL=azure-keyvault.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"azure-keyvault.provider.js","sourceRoot":"","sources":["../../../../src/executors/secrets-vercel-sync/providers/azure-keyvault.provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ILogger } from '@breadstone-infrastructure/utilities';
|
|
2
|
+
import type { ISecretsProvider } from './secrets-provider.interface';
|
|
3
|
+
/**
|
|
4
|
+
* Secrets provider implementation for Doppler.
|
|
5
|
+
*
|
|
6
|
+
* @public
|
|
7
|
+
*/
|
|
8
|
+
export declare class DopplerSecretsProvider implements ISecretsProvider {
|
|
9
|
+
/**
|
|
10
|
+
* @inheritdoc
|
|
11
|
+
*/
|
|
12
|
+
authenticate(apiKey?: string, interactive?: boolean): Promise<string>;
|
|
13
|
+
/**
|
|
14
|
+
* @inheritdoc
|
|
15
|
+
*/
|
|
16
|
+
fetchSecrets(token: string, project: string, config: string, logger: ILogger): Promise<Record<string, string>>;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=doppler.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doppler.provider.d.ts","sourceRoot":"","sources":["../../../../src/executors/secrets-vercel-sync/providers/doppler.provider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAEpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAiBrE;;;;GAIG;AACH,qBAAa,sBAAuB,YAAW,gBAAgB;IAI3D;;OAEG;IACU,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IA6BlF;;OAEG;IACU,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CA2B9H"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// #region Imports
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.DopplerSecretsProvider = void 0;
|
|
5
|
+
const enquirer_1 = require("enquirer");
|
|
6
|
+
// #endregion
|
|
7
|
+
/**
|
|
8
|
+
* Secrets provider implementation for Doppler.
|
|
9
|
+
*
|
|
10
|
+
* @public
|
|
11
|
+
*/
|
|
12
|
+
class DopplerSecretsProvider {
|
|
13
|
+
// #region Methods
|
|
14
|
+
/**
|
|
15
|
+
* @inheritdoc
|
|
16
|
+
*/
|
|
17
|
+
async authenticate(apiKey, interactive) {
|
|
18
|
+
if (apiKey) {
|
|
19
|
+
return apiKey;
|
|
20
|
+
}
|
|
21
|
+
const envToken = process.env['DOPPLER_TOKEN'];
|
|
22
|
+
if (envToken) {
|
|
23
|
+
return envToken;
|
|
24
|
+
}
|
|
25
|
+
if (interactive) {
|
|
26
|
+
const credentials = await (0, enquirer_1.prompt)([
|
|
27
|
+
{
|
|
28
|
+
type: 'input',
|
|
29
|
+
name: 'token',
|
|
30
|
+
message: 'Enter your Doppler API token:\nYou can find it in your Doppler account under Service Tokens or Personal Tokens.'
|
|
31
|
+
}
|
|
32
|
+
]);
|
|
33
|
+
if (!credentials.token) {
|
|
34
|
+
throw new Error('No Doppler API token provided. Aborting.');
|
|
35
|
+
}
|
|
36
|
+
return credentials.token;
|
|
37
|
+
}
|
|
38
|
+
throw new Error('DOPPLER_TOKEN environment variable is not set. Set it to a Doppler Service Token or Personal Token, or enable interactive mode.');
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* @inheritdoc
|
|
42
|
+
*/
|
|
43
|
+
async fetchSecrets(token, project, config, logger) {
|
|
44
|
+
const apiUrl = `https://api.doppler.com/v3/configs/config/secrets?project=${encodeURIComponent(project)}&config=${encodeURIComponent(config)}&include_dynamic_secrets=false&include_managed_secrets=true`;
|
|
45
|
+
const response = await fetch(apiUrl, {
|
|
46
|
+
headers: { Authorization: `Bearer ${token}` }
|
|
47
|
+
});
|
|
48
|
+
if (!response.ok) {
|
|
49
|
+
throw new Error(`Failed to fetch Doppler secrets (HTTP ${response.status}): ${response.statusText}`);
|
|
50
|
+
}
|
|
51
|
+
const data = await response.json();
|
|
52
|
+
if (!data.success) {
|
|
53
|
+
throw new Error('Doppler API returned success=false.');
|
|
54
|
+
}
|
|
55
|
+
const secrets = Object.fromEntries(Object.entries(data.secrets).map(([key, value]) => [key, value.computed]));
|
|
56
|
+
logger.log(` Fetched ${Object.keys(secrets).length} secrets from Doppler [${project}/${config}].`);
|
|
57
|
+
return secrets;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.DopplerSecretsProvider = DopplerSecretsProvider;
|
|
61
|
+
//# sourceMappingURL=doppler.provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doppler.provider.js","sourceRoot":"","sources":["../../../../src/executors/secrets-vercel-sync/providers/doppler.provider.ts"],"names":[],"mappings":";AAAA,kBAAkB;;;AAGlB,uCAAkC;AAgBlC,aAAa;AAEb;;;;GAIG;AACH,MAAa,sBAAsB;IAE/B,kBAAkB;IAElB;;OAEG;IACI,KAAK,CAAC,YAAY,CAAC,MAAe,EAAE,WAAqB;QAC5D,IAAI,MAAM,EAAE,CAAC;YACT,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QAC9C,IAAI,QAAQ,EAAE,CAAC;YACX,OAAO,QAAQ,CAAC;QACpB,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YACd,MAAM,WAAW,GAAG,MAAM,IAAA,iBAAM,EAAoB;gBAChD;oBACI,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,iHAAiH;iBAC7H;aACJ,CAAC,CAAC;YAEH,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAChE,CAAC;YAED,OAAO,WAAW,CAAC,KAAK,CAAC;QAC7B,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,iIAAiI,CAAC,CAAC;IACvJ,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,YAAY,CAAC,KAAa,EAAE,OAAe,EAAE,MAAc,EAAE,MAAe;QACrF,MAAM,MAAM,GAAG,6DAA6D,kBAAkB,CAAC,OAAO,CAAC,WAAW,kBAAkB,CAAC,MAAM,CAAC,6DAA6D,CAAC;QAE1M,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE;YACjC,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,KAAK,EAAE,EAAE;SAChD,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,yCAAyC,QAAQ,CAAC,MAAM,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACzG,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA6B,CAAC;QAE9D,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC3D,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,CAC9B,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAC5E,CAAC;QAEF,MAAM,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,0BAA0B,OAAO,IAAI,MAAM,IAAI,CAAC,CAAC;QAEpG,OAAO,OAAO,CAAC;IACnB,CAAC;CAGJ;AAlED,wDAkEC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ISecretsProvider } from './secrets-provider.interface';
|
|
2
|
+
/**
|
|
3
|
+
* The supported secrets provider types.
|
|
4
|
+
*
|
|
5
|
+
* @public
|
|
6
|
+
*/
|
|
7
|
+
export type SecretsProviderType = 'doppler' | 'azure-keyvault';
|
|
8
|
+
/**
|
|
9
|
+
* Creates an {@link ISecretsProvider} instance for the given provider type.
|
|
10
|
+
*
|
|
11
|
+
* @param type - The provider type to instantiate.
|
|
12
|
+
* @returns The corresponding secrets provider.
|
|
13
|
+
*
|
|
14
|
+
* @public
|
|
15
|
+
*/
|
|
16
|
+
export declare function createSecretsProvider(type: SecretsProviderType): ISecretsProvider;
|
|
17
|
+
//# sourceMappingURL=secrets-provider.factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets-provider.factory.d.ts","sourceRoot":"","sources":["../../../../src/executors/secrets-vercel-sync/providers/secrets-provider.factory.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAIrE;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,gBAAgB,CAAC;AAE/D;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,GAAG,gBAAgB,CASjF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// #region Imports
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.createSecretsProvider = createSecretsProvider;
|
|
5
|
+
const azure_keyvault_provider_1 = require("./azure-keyvault.provider");
|
|
6
|
+
const doppler_provider_1 = require("./doppler.provider");
|
|
7
|
+
/**
|
|
8
|
+
* Creates an {@link ISecretsProvider} instance for the given provider type.
|
|
9
|
+
*
|
|
10
|
+
* @param type - The provider type to instantiate.
|
|
11
|
+
* @returns The corresponding secrets provider.
|
|
12
|
+
*
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
function createSecretsProvider(type) {
|
|
16
|
+
switch (type) {
|
|
17
|
+
case 'doppler':
|
|
18
|
+
return new doppler_provider_1.DopplerSecretsProvider();
|
|
19
|
+
case 'azure-keyvault':
|
|
20
|
+
return new azure_keyvault_provider_1.AzureKeyVaultSecretsProvider();
|
|
21
|
+
default:
|
|
22
|
+
throw new Error(`Unknown secrets provider type: "${type}". Supported: doppler, azure-keyvault.`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=secrets-provider.factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets-provider.factory.js","sourceRoot":"","sources":["../../../../src/executors/secrets-vercel-sync/providers/secrets-provider.factory.ts"],"names":[],"mappings":";AAAA,kBAAkB;;AAuBlB,sDASC;AA9BD,uEAAyE;AACzE,yDAA4D;AAY5D;;;;;;;GAOG;AACH,SAAgB,qBAAqB,CAAC,IAAyB;IAC3D,QAAQ,IAAI,EAAE,CAAC;QACX,KAAK,SAAS;YACV,OAAO,IAAI,yCAAsB,EAAE,CAAC;QACxC,KAAK,gBAAgB;YACjB,OAAO,IAAI,sDAA4B,EAAE,CAAC;QAC9C;YACI,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,wCAAwC,CAAC,CAAC;IACzG,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ILogger } from '@breadstone-infrastructure/utilities';
|
|
2
|
+
/**
|
|
3
|
+
* Abstraction for a secrets provider that can authenticate and fetch secrets.
|
|
4
|
+
*
|
|
5
|
+
* @public
|
|
6
|
+
*/
|
|
7
|
+
export interface ISecretsProvider {
|
|
8
|
+
/**
|
|
9
|
+
* Authenticates with the provider and returns an access token.
|
|
10
|
+
*
|
|
11
|
+
* @param apiKey - An optional API key or access token. If provided, it is used directly.
|
|
12
|
+
* @param interactive - Whether to prompt the user for credentials if none are provided.
|
|
13
|
+
* @returns The resolved access token.
|
|
14
|
+
*/
|
|
15
|
+
authenticate(apiKey?: string, interactive?: boolean): Promise<string>;
|
|
16
|
+
/**
|
|
17
|
+
* Fetches all secrets from the provider.
|
|
18
|
+
*
|
|
19
|
+
* @param token - The access token obtained from {@link authenticate}.
|
|
20
|
+
* @param project - The project identifier (Doppler project name, or ignored for Azure Key Vault).
|
|
21
|
+
* @param config - The config identifier (Doppler config name, or ignored for Azure Key Vault).
|
|
22
|
+
* @param logger - Logger instance for status output.
|
|
23
|
+
* @param vaultUrl - The Azure Key Vault URL (only used by the azure-keyvault provider).
|
|
24
|
+
* @returns A flat record of secret key-value pairs.
|
|
25
|
+
*/
|
|
26
|
+
fetchSecrets(token: string, project: string, config: string, logger: ILogger, vaultUrl?: string): Promise<Record<string, string>>;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=secrets-provider.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets-provider.interface.d.ts","sourceRoot":"","sources":["../../../../src/executors/secrets-vercel-sync/providers/secrets-provider.interface.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sCAAsC,CAAC;AAIpE;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAE7B;;;;;;OAMG;IACH,YAAY,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEtE;;;;;;;;;OASG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CACrI"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets-provider.interface.js","sourceRoot":"","sources":["../../../../src/executors/secrets-vercel-sync/providers/secrets-provider.interface.ts"],"names":[],"mappings":";AAAA,kBAAkB"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema",
|
|
3
|
+
"cli": "nx",
|
|
4
|
+
"title": "Secrets Vercel Sync",
|
|
5
|
+
"description": "Synchronizes secrets from a configurable provider (Doppler, Azure Key Vault) to a Vercel project/environment.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"properties": {
|
|
8
|
+
"provider": {
|
|
9
|
+
"type": "string",
|
|
10
|
+
"description": "The secrets provider to use.",
|
|
11
|
+
"enum": [
|
|
12
|
+
"doppler",
|
|
13
|
+
"azure-keyvault"
|
|
14
|
+
],
|
|
15
|
+
"default": "doppler"
|
|
16
|
+
},
|
|
17
|
+
"secretsProject": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"description": "The secrets provider project identifier (e.g. Doppler project name)."
|
|
20
|
+
},
|
|
21
|
+
"secretsConfig": {
|
|
22
|
+
"type": "string",
|
|
23
|
+
"description": "The secrets provider configuration identifier (e.g. Doppler config name: dev, prev, prod)."
|
|
24
|
+
},
|
|
25
|
+
"vaultUrl": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"description": "The Azure Key Vault URL (e.g. https://my-vault.vault.azure.net). Required when provider is azure-keyvault."
|
|
28
|
+
},
|
|
29
|
+
"apiKey": {
|
|
30
|
+
"type": "string",
|
|
31
|
+
"description": "The API key or access token for the secrets provider. If omitted, resolved from environment or prompted interactively."
|
|
32
|
+
},
|
|
33
|
+
"vercelTeam": {
|
|
34
|
+
"type": "string",
|
|
35
|
+
"description": "The Vercel team slug or scope."
|
|
36
|
+
},
|
|
37
|
+
"vercelProject": {
|
|
38
|
+
"type": "string",
|
|
39
|
+
"description": "The Vercel project name or ID."
|
|
40
|
+
},
|
|
41
|
+
"vercelEnvironment": {
|
|
42
|
+
"type": "string",
|
|
43
|
+
"description": "The target Vercel environment.",
|
|
44
|
+
"enum": [
|
|
45
|
+
"development",
|
|
46
|
+
"preview",
|
|
47
|
+
"production"
|
|
48
|
+
]
|
|
49
|
+
},
|
|
50
|
+
"vercelVariableType": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"description": "The Vercel variable type (encrypted or sensitive).",
|
|
53
|
+
"enum": [
|
|
54
|
+
"encrypted",
|
|
55
|
+
"sensitive"
|
|
56
|
+
],
|
|
57
|
+
"default": "encrypted"
|
|
58
|
+
},
|
|
59
|
+
"conflictStrategy": {
|
|
60
|
+
"type": "string",
|
|
61
|
+
"description": "How to handle conflicts between the secrets provider and existing Vercel values.",
|
|
62
|
+
"enum": [
|
|
63
|
+
"none",
|
|
64
|
+
"prefer-source",
|
|
65
|
+
"prefer-vercel"
|
|
66
|
+
],
|
|
67
|
+
"default": "prefer-source"
|
|
68
|
+
},
|
|
69
|
+
"dryRun": {
|
|
70
|
+
"type": "boolean",
|
|
71
|
+
"description": "If true, no changes are written to Vercel. Only a diff report is shown.",
|
|
72
|
+
"default": false
|
|
73
|
+
},
|
|
74
|
+
"deleteMissing": {
|
|
75
|
+
"type": "boolean",
|
|
76
|
+
"description": "If true, keys present in Vercel but not in the secrets provider are deleted. Must be explicitly enabled.",
|
|
77
|
+
"default": false
|
|
78
|
+
},
|
|
79
|
+
"includeKeys": {
|
|
80
|
+
"type": "array",
|
|
81
|
+
"items": {
|
|
82
|
+
"type": "string"
|
|
83
|
+
},
|
|
84
|
+
"description": "If set, only these keys are synchronized."
|
|
85
|
+
},
|
|
86
|
+
"excludeKeys": {
|
|
87
|
+
"type": "array",
|
|
88
|
+
"items": {
|
|
89
|
+
"type": "string"
|
|
90
|
+
},
|
|
91
|
+
"description": "If set, these keys are excluded from synchronization."
|
|
92
|
+
},
|
|
93
|
+
"redeploy": {
|
|
94
|
+
"type": "boolean",
|
|
95
|
+
"description": "If true, triggers a redeployment of the Vercel project after sync.",
|
|
96
|
+
"default": false
|
|
97
|
+
},
|
|
98
|
+
"interactive": {
|
|
99
|
+
"type": "boolean",
|
|
100
|
+
"description": "If true, prompts the user for missing tokens instead of failing.",
|
|
101
|
+
"default": false
|
|
102
|
+
}
|
|
103
|
+
},
|
|
104
|
+
"required": [
|
|
105
|
+
"secretsProject",
|
|
106
|
+
"secretsConfig",
|
|
107
|
+
"vercelTeam",
|
|
108
|
+
"vercelProject",
|
|
109
|
+
"vercelEnvironment"
|
|
110
|
+
],
|
|
111
|
+
"additionalProperties": false
|
|
112
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { RuleSeverity } from '@breadstone-infrastructure/token-linter';
|
|
2
2
|
/**
|
|
3
3
|
* @description Options for the token-linter executor as declared in project.json.
|
|
4
|
-
* All fields are optional
|
|
4
|
+
* All fields are optional - the primary config comes from `tokenlinter.config.mjs`.
|
|
5
5
|
* Any options specified here override the config file values.
|
|
6
6
|
* @public
|
|
7
7
|
*/
|
|
@@ -7,7 +7,7 @@ import { type RuleSeverity } from '@breadstone-infrastructure/token-linter';
|
|
|
7
7
|
*/
|
|
8
8
|
export declare namespace TokenLinterTask {
|
|
9
9
|
/**
|
|
10
|
-
* @description All fields are optional
|
|
10
|
+
* @description All fields are optional - the primary configuration comes from
|
|
11
11
|
* the `tokenlinter.config.mjs` config file. Any values provided here override
|
|
12
12
|
* the config file values.
|
|
13
13
|
* @public
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "object",
|
|
3
|
-
"description": "Token linter executor options. All fields are optional
|
|
3
|
+
"description": "Token linter executor options. All fields are optional - the primary config comes from `tokenlinter.config.mjs` in the project root. Options specified here override the config file values.",
|
|
4
4
|
"properties": {
|
|
5
5
|
"tokensDir": {
|
|
6
6
|
"type": "string",
|
package/executors.json
CHANGED
|
@@ -1,139 +1,149 @@
|
|
|
1
1
|
{
|
|
2
2
|
"executors": {
|
|
3
3
|
"alias-replace": {
|
|
4
|
-
"description": "alias
|
|
4
|
+
"description": "Replaces alias placeholders in build output files with resolved values from environment, package.json, or custom expressions.",
|
|
5
5
|
"implementation": "./executors/alias-replace/executor",
|
|
6
6
|
"schema": "./executors/alias-replace/schema.json"
|
|
7
7
|
},
|
|
8
8
|
"clean": {
|
|
9
|
-
"description": "
|
|
9
|
+
"description": "Removes build artifacts, caches, and temporary files from a project directory.",
|
|
10
10
|
"implementation": "./executors/clean/executor",
|
|
11
11
|
"schema": "./executors/clean/schema.json"
|
|
12
12
|
},
|
|
13
13
|
"copy": {
|
|
14
|
-
"description": "
|
|
14
|
+
"description": "Copies files or directories from a source to a destination path.",
|
|
15
15
|
"implementation": "./executors/copy/executor",
|
|
16
16
|
"schema": "./executors/copy/schema.json"
|
|
17
17
|
},
|
|
18
18
|
"copy2": {
|
|
19
|
-
"description": "
|
|
19
|
+
"description": "Copies files or directories with extended options and glob pattern support.",
|
|
20
20
|
"implementation": "./executors/copy2/executor",
|
|
21
21
|
"schema": "./executors/copy2/schema.json"
|
|
22
22
|
},
|
|
23
23
|
"docs": {
|
|
24
|
-
"description": "docs
|
|
24
|
+
"description": "Generates API documentation using API Extractor and outputs it to the docs directory.",
|
|
25
25
|
"implementation": "./executors/docs/executor",
|
|
26
26
|
"schema": "./executors/docs/schema.json"
|
|
27
27
|
},
|
|
28
|
-
"
|
|
29
|
-
"description": "
|
|
30
|
-
"implementation": "./executors/
|
|
31
|
-
"schema": "./executors/
|
|
28
|
+
"secrets-config-sync": {
|
|
29
|
+
"description": "Fetches secrets from a configurable provider (Doppler, Azure Key Vault) and writes them to local .env files.",
|
|
30
|
+
"implementation": "./executors/secrets-config-sync/executor",
|
|
31
|
+
"schema": "./executors/secrets-config-sync/schema.json"
|
|
32
|
+
},
|
|
33
|
+
"secrets-vercel-sync": {
|
|
34
|
+
"description": "Synchronizes secrets from a configurable provider (Doppler, Azure Key Vault) to a Vercel project/environment.",
|
|
35
|
+
"implementation": "./executors/secrets-vercel-sync/executor",
|
|
36
|
+
"schema": "./executors/secrets-vercel-sync/schema.json"
|
|
32
37
|
},
|
|
33
38
|
"icon-collection-builder": {
|
|
34
|
-
"description": "icon
|
|
39
|
+
"description": "Builds optimized icon collection bundles from downloaded SVG icon sources.",
|
|
35
40
|
"implementation": "./executors/icon-collection-builder/executor",
|
|
36
41
|
"schema": "./executors/icon-collection-builder/schema.json"
|
|
37
42
|
},
|
|
38
43
|
"icon-collection-downloader": {
|
|
39
|
-
"description": "icon
|
|
44
|
+
"description": "Downloads icon collections from configured providers (Fluent UI, Lucide, etc.) into the project.",
|
|
40
45
|
"implementation": "./executors/icon-collection-downloader/executor",
|
|
41
46
|
"schema": "./executors/icon-collection-downloader/schema.json"
|
|
42
47
|
},
|
|
43
48
|
"lit-style-transform": {
|
|
44
|
-
"description": "
|
|
49
|
+
"description": "Transforms SCSS files into Lit-compatible CSSResult TypeScript modules.",
|
|
45
50
|
"implementation": "./executors/lit-style-transform/executor",
|
|
46
51
|
"schema": "./executors/lit-style-transform/schema.json"
|
|
47
52
|
},
|
|
48
53
|
"lit-docs": {
|
|
49
|
-
"description": "
|
|
54
|
+
"description": "Generates documentation for Lit web components using Web Component Analyzer.",
|
|
50
55
|
"implementation": "./executors/lit-docs/executor",
|
|
51
56
|
"schema": "./executors/lit-docs/schema.json"
|
|
52
57
|
},
|
|
53
58
|
"localizator": {
|
|
54
|
-
"description": "
|
|
59
|
+
"description": "Detects, analyzes, transforms, sorts, and generates localization resources for frontend applications.",
|
|
55
60
|
"implementation": "./executors/localizator/executor",
|
|
56
61
|
"schema": "./executors/localizator/schema.json"
|
|
57
62
|
},
|
|
58
63
|
"markdown-to-typescript-transform": {
|
|
59
|
-
"description": "
|
|
64
|
+
"description": "Converts Markdown files into TypeScript modules using a configurable template.",
|
|
60
65
|
"implementation": "./executors/markdown-to-typescript-transform/executor",
|
|
61
66
|
"schema": "./executors/markdown-to-typescript-transform/schema.json"
|
|
62
67
|
},
|
|
63
68
|
"ng-packagr-build": {
|
|
64
|
-
"description": "ng-packagr
|
|
69
|
+
"description": "Builds Angular libraries using ng-packagr with extended configuration support.",
|
|
65
70
|
"implementation": "./executors/ng-packagr-build/executor",
|
|
66
71
|
"schema": "./executors/ng-packagr-build/schema.json"
|
|
67
72
|
},
|
|
68
73
|
"ng-api-extractor": {
|
|
69
|
-
"description": "
|
|
74
|
+
"description": "Runs API Extractor on Angular library builds to generate API reports and documentation.",
|
|
70
75
|
"implementation": "./executors/ng-api-extractor/executor",
|
|
71
76
|
"schema": "./executors/ng-api-extractor/schema.json"
|
|
72
77
|
},
|
|
73
78
|
"ng-proxy-transform": {
|
|
74
|
-
"description": "
|
|
79
|
+
"description": "Generates Angular wrapper components from Lit web component manifests.",
|
|
75
80
|
"implementation": "./executors/ng-proxy-transform/executor",
|
|
76
81
|
"schema": "./executors/ng-proxy-transform/schema.json"
|
|
77
82
|
},
|
|
78
83
|
"openapi-generator": {
|
|
79
|
-
"description": "
|
|
84
|
+
"description": "Generates typed API client code from an OpenAPI specification endpoint.",
|
|
80
85
|
"implementation": "./executors/openapi-generator/executor",
|
|
81
86
|
"schema": "./executors/openapi-generator/schema.json"
|
|
82
87
|
},
|
|
83
88
|
"react-proxy-transform": {
|
|
84
|
-
"description": "
|
|
89
|
+
"description": "Generates React wrapper components from Lit web component manifests.",
|
|
85
90
|
"implementation": "./executors/react-proxy-transform/executor",
|
|
86
91
|
"schema": "./executors/react-proxy-transform/schema.json"
|
|
87
92
|
},
|
|
88
93
|
"release-package": {
|
|
89
|
-
"description": "
|
|
94
|
+
"description": "Publishes a built package to the npm registry as part of the release workflow.",
|
|
90
95
|
"implementation": "./executors/release-package/executor",
|
|
91
96
|
"schema": "./executors/release-package/schema.json"
|
|
92
97
|
},
|
|
93
98
|
"release-package-json": {
|
|
94
|
-
"description": "
|
|
99
|
+
"description": "Prepares and patches package.json for publishing during the release process.",
|
|
95
100
|
"implementation": "./executors/release-package-json/executor",
|
|
96
101
|
"schema": "./executors/release-package-json/schema.json"
|
|
97
102
|
},
|
|
98
103
|
"scss-style-bundle": {
|
|
99
|
-
"description": "
|
|
104
|
+
"description": "Bundles multiple SCSS files into a single consolidated stylesheet output.",
|
|
100
105
|
"implementation": "./executors/scss-style-bundle/executor",
|
|
101
106
|
"schema": "./executors/scss-style-bundle/schema.json"
|
|
102
107
|
},
|
|
103
108
|
"scss-style-transform": {
|
|
104
|
-
"description": "
|
|
109
|
+
"description": "Compiles SCSS files into CSS and outputs them alongside the source files.",
|
|
105
110
|
"implementation": "./executors/scss-style-transform/executor",
|
|
106
111
|
"schema": "./executors/scss-style-transform/schema.json"
|
|
107
112
|
},
|
|
108
113
|
"svelte-proxy-transform": {
|
|
109
|
-
"description": "
|
|
114
|
+
"description": "Generates Svelte wrapper components from Lit web component manifests.",
|
|
110
115
|
"implementation": "./executors/svelte-proxy-transform/executor",
|
|
111
116
|
"schema": "./executors/svelte-proxy-transform/schema.json"
|
|
112
117
|
},
|
|
113
118
|
"unrelease-package": {
|
|
114
|
-
"description": "
|
|
119
|
+
"description": "Unpublishes a package version from the npm registry to revert a release.",
|
|
115
120
|
"implementation": "./executors/unrelease-package/executor",
|
|
116
121
|
"schema": "./executors/unrelease-package/schema.json"
|
|
117
122
|
},
|
|
118
123
|
"vercel-edge-config-sync": {
|
|
119
|
-
"description": "
|
|
124
|
+
"description": "Fetches Vercel Edge Config values and writes them to a local app.json file.",
|
|
120
125
|
"implementation": "./executors/vercel-edge-config-sync/executor",
|
|
121
126
|
"schema": "./executors/vercel-edge-config-sync/schema.json"
|
|
122
127
|
},
|
|
123
128
|
"vue-proxy-transform": {
|
|
124
|
-
"description": "
|
|
129
|
+
"description": "Generates Vue wrapper components from Lit web component manifests.",
|
|
125
130
|
"implementation": "./executors/vue-proxy-transform/executor",
|
|
126
131
|
"schema": "./executors/vue-proxy-transform/schema.json"
|
|
127
132
|
},
|
|
128
133
|
"token-linter": {
|
|
129
|
-
"description": "token
|
|
134
|
+
"description": "Lints Style Dictionary design token JSON files against configurable rules and conventions.",
|
|
130
135
|
"implementation": "./executors/token-linter/executor",
|
|
131
136
|
"schema": "./executors/token-linter/schema.json"
|
|
132
137
|
},
|
|
133
138
|
"prisma-seeds": {
|
|
134
|
-
"description": "
|
|
139
|
+
"description": "Seeds the PostgreSQL database with initial or test data via Prisma.",
|
|
135
140
|
"implementation": "./executors/prisma-seeds/executor",
|
|
136
141
|
"schema": "./executors/prisma-seeds/schema.json"
|
|
142
|
+
},
|
|
143
|
+
"generate-package-docs": {
|
|
144
|
+
"description": "Generates API documentation for a library package using TypeDoc with Markdown output and configurable post-processing.",
|
|
145
|
+
"implementation": "./executors/generate-package-docs/executor",
|
|
146
|
+
"schema": "./executors/generate-package-docs/schema.json"
|
|
137
147
|
}
|
|
138
148
|
}
|
|
139
149
|
}
|