@supernovaio/cli-next 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +201 -0
- package/bin/dev +7 -0
- package/bin/dev.cmd +3 -0
- package/bin/run +57 -0
- package/bin/run.cmd +3 -0
- package/dist/commands/describe-design-system.d.ts +45 -0
- package/dist/commands/describe-design-system.d.ts.map +1 -0
- package/dist/commands/describe-design-system.js +75 -0
- package/dist/commands/describe-design-system.js.map +1 -0
- package/dist/commands/describe-workspaces.d.ts +54 -0
- package/dist/commands/describe-workspaces.d.ts.map +1 -0
- package/dist/commands/describe-workspaces.js +111 -0
- package/dist/commands/describe-workspaces.js.map +1 -0
- package/dist/commands/import-components.d.ts +50 -0
- package/dist/commands/import-components.d.ts.map +1 -0
- package/dist/commands/import-components.js +93 -0
- package/dist/commands/import-components.js.map +1 -0
- package/dist/commands/import-storybook.d.ts +69 -0
- package/dist/commands/import-storybook.d.ts.map +1 -0
- package/dist/commands/import-storybook.js +348 -0
- package/dist/commands/import-storybook.js.map +1 -0
- package/dist/commands/login.d.ts +30 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +78 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +28 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +46 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/publish-documentation.d.ts +63 -0
- package/dist/commands/publish-documentation.d.ts.map +1 -0
- package/dist/commands/publish-documentation.js +136 -0
- package/dist/commands/publish-documentation.js.map +1 -0
- package/dist/commands/sync-tokens.d.ts +70 -0
- package/dist/commands/sync-tokens.d.ts.map +1 -0
- package/dist/commands/sync-tokens.js +109 -0
- package/dist/commands/sync-tokens.js.map +1 -0
- package/dist/hooks/postrun/save-config.d.ts +4 -0
- package/dist/hooks/postrun/save-config.d.ts.map +1 -0
- package/dist/hooks/postrun/save-config.js +17 -0
- package/dist/hooks/postrun/save-config.js.map +1 -0
- package/dist/hooks/prerun/load-config.d.ts +4 -0
- package/dist/hooks/prerun/load-config.d.ts.map +1 -0
- package/dist/hooks/prerun/load-config.js +24 -0
- package/dist/hooks/prerun/load-config.js.map +1 -0
- package/dist/hooks/prerun/sentry.d.ts +4 -0
- package/dist/hooks/prerun/sentry.d.ts.map +1 -0
- package/dist/hooks/prerun/sentry.js +17 -0
- package/dist/hooks/prerun/sentry.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/services/auth.service.d.ts +12 -0
- package/dist/services/auth.service.d.ts.map +1 -0
- package/dist/services/auth.service.js +104 -0
- package/dist/services/auth.service.js.map +1 -0
- package/dist/services/index.d.ts +3 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +3 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/vault.service.d.ts +28 -0
- package/dist/services/vault.service.d.ts.map +1 -0
- package/dist/services/vault.service.js +181 -0
- package/dist/services/vault.service.js.map +1 -0
- package/dist/types/base-command.d.ts +23 -0
- package/dist/types/base-command.d.ts.map +1 -0
- package/dist/types/base-command.js +127 -0
- package/dist/types/base-command.js.map +1 -0
- package/dist/types/flags.d.ts +4 -0
- package/dist/types/flags.d.ts.map +1 -0
- package/dist/types/flags.js +11 -0
- package/dist/types/flags.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/login.d.ts +189 -0
- package/dist/types/login.d.ts.map +1 -0
- package/dist/types/login.js +39 -0
- package/dist/types/login.js.map +1 -0
- package/dist/types/not-authorized.error.d.ts +6 -0
- package/dist/types/not-authorized.error.d.ts.map +1 -0
- package/dist/types/not-authorized.error.js +13 -0
- package/dist/types/not-authorized.error.js.map +1 -0
- package/dist/types/sentry-command.d.ts +15 -0
- package/dist/types/sentry-command.d.ts.map +1 -0
- package/dist/types/sentry-command.js +50 -0
- package/dist/types/sentry-command.js.map +1 -0
- package/dist/types/types.d.ts +29 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/types.js +17 -0
- package/dist/types/types.js.map +1 -0
- package/dist/utils/api-client.d.ts +4 -0
- package/dist/utils/api-client.d.ts.map +1 -0
- package/dist/utils/api-client.js +11 -0
- package/dist/utils/api-client.js.map +1 -0
- package/dist/utils/common.d.ts +2 -0
- package/dist/utils/common.d.ts.map +1 -0
- package/dist/utils/common.js +6 -0
- package/dist/utils/common.js.map +1 -0
- package/dist/utils/config.service.d.ts +17 -0
- package/dist/utils/config.service.d.ts.map +1 -0
- package/dist/utils/config.service.js +70 -0
- package/dist/utils/config.service.js.map +1 -0
- package/dist/utils/figma-tokens-data-loader.d.ts +17 -0
- package/dist/utils/figma-tokens-data-loader.d.ts.map +1 -0
- package/dist/utils/figma-tokens-data-loader.js +193 -0
- package/dist/utils/figma-tokens-data-loader.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +2 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/network.d.ts +3 -0
- package/dist/utils/network.d.ts.map +1 -0
- package/dist/utils/network.js +13 -0
- package/dist/utils/network.js.map +1 -0
- package/dist/utils/run-exporter/exporter-utils.d.ts +14 -0
- package/dist/utils/run-exporter/exporter-utils.d.ts.map +1 -0
- package/dist/utils/run-exporter/exporter-utils.js +16 -0
- package/dist/utils/run-exporter/exporter-utils.js.map +1 -0
- package/dist/utils/sdk.d.ts +20 -0
- package/dist/utils/sdk.d.ts.map +1 -0
- package/dist/utils/sdk.js +52 -0
- package/dist/utils/sdk.js.map +1 -0
- package/oclif.manifest.json +534 -0
- package/package.json +143 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/utils/api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAA0B,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAE7C,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAA;AAEvC,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,EAAE,MAAiB,gBAAgB,EAAE,OAAgB,EAA+B,EAAE;IAClH,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,YAAY,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAA;IAClE,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAkB,EAAE,OAAO,CAAC,CAAC,CAAA;IACpE,OAAO,IAAI,kBAAkB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;AACpE,CAAC,CAAA","sourcesContent":["import { SupernovaApiClient } from \"@supernova-studio/client\"\n\nimport { VaultService } from \"../services/index.js\"\nimport { defaultTargetEnv, Environment, TargetEnv } from \"../types/index.js\"\nimport { environmentAPI } from \"./network.js\"\n\nconst vaultService = new VaultService()\n\nexport const getClient = async (env: TargetEnv = defaultTargetEnv, version?: string): Promise<SupernovaApiClient> => {\n const { accessToken } = await vaultService.getTokensFromVault(env)\n const hostUrl = new URL(environmentAPI(env as Environment, version))\n return new SupernovaApiClient({ accessToken, host: hostUrl.host })\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/utils/common.ts"],"names":[],"mappings":"AAAA,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIrD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/utils/common.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,EAAU;IACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;IACzB,CAAC,CAAC,CAAA;AACJ,CAAC","sourcesContent":["export async function sleep(ms: number): Promise<void> {\n return new Promise((resolve) => {\n setTimeout(resolve, ms)\n })\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export type Config = {
|
|
3
|
+
commands: Record<string, object>;
|
|
4
|
+
global: Record<string, object>;
|
|
5
|
+
};
|
|
6
|
+
export declare class ConfigService {
|
|
7
|
+
private static instance;
|
|
8
|
+
private configCache;
|
|
9
|
+
private readonly configPath;
|
|
10
|
+
private constructor();
|
|
11
|
+
static getInstance(): ConfigService;
|
|
12
|
+
getCommandConfig<T>(commandId: string, schema: z.ZodType<T>): T;
|
|
13
|
+
loadConfig(): Config;
|
|
14
|
+
saveConfig(config: Config): void;
|
|
15
|
+
updateCommandConfig(commandId: string, config: Record<string, unknown>): void;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=config.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.service.d.ts","sourceRoot":"","sources":["../../src/utils/config.service.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC/B,CAAA;AAED,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAe;IACtC,OAAO,CAAC,WAAW,CAAsB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IAEnC,OAAO;WAMO,WAAW,IAAI,aAAa;IAQnC,gBAAgB,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAiB/D,UAAU,IAAI,MAAM;IAgBpB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAShC,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;CAcrF"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
export class ConfigService {
|
|
6
|
+
static instance;
|
|
7
|
+
configCache = null;
|
|
8
|
+
configPath;
|
|
9
|
+
constructor() {
|
|
10
|
+
const possiblePaths = [join(process.cwd(), ".supernova.json"), join(homedir(), ".supernova.json")];
|
|
11
|
+
this.configPath = possiblePaths.find(path => fs.existsSync(path)) || possiblePaths[0];
|
|
12
|
+
}
|
|
13
|
+
static getInstance() {
|
|
14
|
+
if (!ConfigService.instance) {
|
|
15
|
+
ConfigService.instance = new ConfigService();
|
|
16
|
+
}
|
|
17
|
+
return ConfigService.instance;
|
|
18
|
+
}
|
|
19
|
+
getCommandConfig(commandId, schema) {
|
|
20
|
+
const config = this.loadConfig();
|
|
21
|
+
const commandConfig = config.commands[commandId];
|
|
22
|
+
if (commandConfig) {
|
|
23
|
+
try {
|
|
24
|
+
return schema.parse(commandConfig);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
if (error instanceof z.ZodError) {
|
|
28
|
+
throw new TypeError(`Invalid configuration for command ${commandId}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return {};
|
|
33
|
+
}
|
|
34
|
+
loadConfig() {
|
|
35
|
+
if (this.configCache)
|
|
36
|
+
return this.configCache;
|
|
37
|
+
try {
|
|
38
|
+
if (fs.existsSync(this.configPath)) {
|
|
39
|
+
const configData = fs.readFileSync(this.configPath, "utf8");
|
|
40
|
+
this.configCache = JSON.parse(configData);
|
|
41
|
+
return this.configCache;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
throw new Error(`Error loading config: ${error.message}`);
|
|
46
|
+
}
|
|
47
|
+
return { commands: {}, global: {} };
|
|
48
|
+
}
|
|
49
|
+
saveConfig(config) {
|
|
50
|
+
try {
|
|
51
|
+
fs.writeFileSync(this.configPath, JSON.stringify(config, null, 2));
|
|
52
|
+
this.configCache = config;
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
throw new Error(`Error saving config: ${error.message}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
updateCommandConfig(commandId, config) {
|
|
59
|
+
const fullConfig = this.loadConfig();
|
|
60
|
+
if (!fullConfig.commands) {
|
|
61
|
+
fullConfig.commands = {};
|
|
62
|
+
}
|
|
63
|
+
fullConfig.commands[commandId] = {
|
|
64
|
+
...fullConfig.commands[commandId],
|
|
65
|
+
...config,
|
|
66
|
+
};
|
|
67
|
+
this.saveConfig(fullConfig);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=config.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.service.js","sourceRoot":"","sources":["../../src/utils/config.service.ts"],"names":[],"mappings":"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","sourcesContent":["import * as fs from \"node:fs\"\nimport { homedir } from \"node:os\"\nimport { join } from \"node:path\"\nimport { z } from \"zod\"\n\nexport type Config = {\n commands: Record<string, object>\n global: Record<string, object>\n}\n\nexport class ConfigService {\n private static instance: ConfigService\n private configCache: Config | null = null\n private readonly configPath: string\n\n private constructor() {\n const possiblePaths = [join(process.cwd(), \".supernova.json\"), join(homedir(), \".supernova.json\")]\n\n this.configPath = possiblePaths.find(path => fs.existsSync(path)) || possiblePaths[0]\n }\n\n public static getInstance(): ConfigService {\n if (!ConfigService.instance) {\n ConfigService.instance = new ConfigService()\n }\n\n return ConfigService.instance\n }\n\n public getCommandConfig<T>(commandId: string, schema: z.ZodType<T>): T {\n const config = this.loadConfig()\n const commandConfig = config.commands[commandId]\n\n if (commandConfig) {\n try {\n return schema.parse(commandConfig)\n } catch (error) {\n if (error instanceof z.ZodError) {\n throw new TypeError(`Invalid configuration for command ${commandId}`)\n }\n }\n }\n\n return {} as T\n }\n\n public loadConfig(): Config {\n if (this.configCache) return this.configCache\n\n try {\n if (fs.existsSync(this.configPath)) {\n const configData = fs.readFileSync(this.configPath, \"utf8\")\n this.configCache = JSON.parse(configData)\n return this.configCache!\n }\n } catch (error) {\n throw new Error(`Error loading config: ${(error as { message: string }).message}`)\n }\n\n return { commands: {}, global: {} }\n }\n\n public saveConfig(config: Config): void {\n try {\n fs.writeFileSync(this.configPath, JSON.stringify(config, null, 2))\n this.configCache = config\n } catch (error) {\n throw new Error(`Error saving config: ${(error as { message: string }).message}`)\n }\n }\n\n public updateCommandConfig(commandId: string, config: Record<string, unknown>): void {\n const fullConfig = this.loadConfig()\n\n if (!fullConfig.commands) {\n fullConfig.commands = {}\n }\n\n fullConfig.commands[commandId] = {\n ...fullConfig.commands[commandId],\n ...config,\n }\n\n this.saveConfig(fullConfig)\n }\n}\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as sdk from '@supernovaio/sdk';
|
|
2
|
+
export declare class FigmaTokensDataLoader {
|
|
3
|
+
loadConfigFromPath(pathToFile: string): {
|
|
4
|
+
mapping: sdk.DTPluginToSupernovaMapPack;
|
|
5
|
+
settings: sdk.DTPluginToSupernovaSettings;
|
|
6
|
+
};
|
|
7
|
+
loadConfigFromPathAsIs(pathToFile: string): sdk.DTPluginToSupernovaMappingFile;
|
|
8
|
+
loadTokensFromDirectory(pathToDirectory: string, settingsPath: string): Promise<object>;
|
|
9
|
+
loadTokensFromPath(pathToFile: string): Promise<object>;
|
|
10
|
+
private getAllJSONFiles;
|
|
11
|
+
private getSetKey;
|
|
12
|
+
private loadObjectFile;
|
|
13
|
+
private parseDefinition;
|
|
14
|
+
private processFileToMapping;
|
|
15
|
+
private weakValidateMapping;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=figma-tokens-data-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"figma-tokens-data-loader.d.ts","sourceRoot":"","sources":["../../src/utils/figma-tokens-data-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,kBAAkB,CAAA;AAGvC,qBAAa,qBAAqB;IAChC,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG;QACtC,OAAO,EAAE,GAAG,CAAC,0BAA0B,CAAA;QACvC,QAAQ,EAAE,GAAG,CAAC,2BAA2B,CAAA;KAC1C;IAUD,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,GAAG,CAAC,8BAA8B;IAcxE,uBAAuB,CAAC,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA4CvF,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAc7D,OAAO,CAAC,eAAe;IAkBvB,OAAO,CAAC,SAAS;YAIH,cAAc;IAc5B,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,oBAAoB;IAiC5B,OAAO,CAAC,mBAAmB;CAyE5B"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import * as sdk from '@supernovaio/sdk';
|
|
2
|
+
import * as fs from 'node:fs';
|
|
3
|
+
export class FigmaTokensDataLoader {
|
|
4
|
+
loadConfigFromPath(pathToFile) {
|
|
5
|
+
try {
|
|
6
|
+
const parsedDefinition = this.loadConfigFromPathAsIs(pathToFile);
|
|
7
|
+
this.weakValidateMapping(parsedDefinition);
|
|
8
|
+
return this.processFileToMapping(parsedDefinition);
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
throw new Error('Unable to load JSON definition file: ' + error);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
loadConfigFromPathAsIs(pathToFile) {
|
|
15
|
+
try {
|
|
16
|
+
if (!(fs.existsSync(pathToFile) && fs.lstatSync(pathToFile).isFile())) {
|
|
17
|
+
throw new Error(`Provided configuration file directory ${pathToFile} is not a file or doesn't exist`);
|
|
18
|
+
}
|
|
19
|
+
const definition = fs.readFileSync(pathToFile, 'utf8');
|
|
20
|
+
const parsedDefinition = this.parseDefinition(definition);
|
|
21
|
+
return parsedDefinition;
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
throw new Error('Unable to load JSON definition file: ' + error);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async loadTokensFromDirectory(pathToDirectory, settingsPath) {
|
|
28
|
+
try {
|
|
29
|
+
const fullStructuredObject = {};
|
|
30
|
+
if (!(fs.existsSync(pathToDirectory) && fs.lstatSync(pathToDirectory).isDirectory())) {
|
|
31
|
+
throw new Error(`Provided data directory ${pathToDirectory} is not a directory or doesn't exist`);
|
|
32
|
+
}
|
|
33
|
+
const jsonPaths = this.getAllJSONFiles(pathToDirectory);
|
|
34
|
+
for (const path of jsonPaths) {
|
|
35
|
+
if (path.endsWith('json') && path !== settingsPath && !path.includes('$')) {
|
|
36
|
+
const result = await this.loadObjectFile(path);
|
|
37
|
+
if (typeof result === 'object') {
|
|
38
|
+
const name = this.getSetKey(path, pathToDirectory);
|
|
39
|
+
fullStructuredObject[name] = result;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const themePath = pathToDirectory + '/' + '$themes.json';
|
|
44
|
+
if (fs.existsSync(themePath)) {
|
|
45
|
+
const themes = await this.loadObjectFile(themePath);
|
|
46
|
+
fullStructuredObject.$themes = themes;
|
|
47
|
+
}
|
|
48
|
+
const metadataPath = pathToDirectory + '/' + '$metadata.json';
|
|
49
|
+
if (fs.existsSync(metadataPath)) {
|
|
50
|
+
const metadata = await this.loadObjectFile(metadataPath);
|
|
51
|
+
fullStructuredObject.$metadata = metadata;
|
|
52
|
+
}
|
|
53
|
+
return fullStructuredObject;
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
throw new Error('Unable to load JSON definition file: ' + error);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async loadTokensFromPath(pathToFile) {
|
|
60
|
+
try {
|
|
61
|
+
if (!(fs.existsSync(pathToFile) && fs.lstatSync(pathToFile).isFile())) {
|
|
62
|
+
throw new Error(`Provided token file directory ${pathToFile} is not a file or doesn't exist`);
|
|
63
|
+
}
|
|
64
|
+
const definition = fs.readFileSync(pathToFile, 'utf8');
|
|
65
|
+
const parsedDefinition = this.parseDefinition(definition);
|
|
66
|
+
return parsedDefinition;
|
|
67
|
+
}
|
|
68
|
+
catch (error) {
|
|
69
|
+
throw new Error('Unable to load JSON definition file: ' + error);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
getAllJSONFiles(dir) {
|
|
73
|
+
const files = fs.readdirSync(dir);
|
|
74
|
+
const jsonFiles = [];
|
|
75
|
+
for (const file of files) {
|
|
76
|
+
const filePath = `${dir}/${file}`;
|
|
77
|
+
const fileStat = fs.statSync(filePath);
|
|
78
|
+
if (fileStat.isDirectory()) {
|
|
79
|
+
jsonFiles.push(...this.getAllJSONFiles(filePath));
|
|
80
|
+
}
|
|
81
|
+
else if (fileStat.isFile() && filePath.endsWith('.json')) {
|
|
82
|
+
jsonFiles.push(filePath);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return jsonFiles;
|
|
86
|
+
}
|
|
87
|
+
getSetKey(jsonFilePath, loadedDirectory) {
|
|
88
|
+
return jsonFilePath.slice(loadedDirectory.length + 1, -5);
|
|
89
|
+
}
|
|
90
|
+
async loadObjectFile(pathToFile) {
|
|
91
|
+
try {
|
|
92
|
+
if (!(fs.existsSync(pathToFile) && fs.lstatSync(pathToFile).isFile())) {
|
|
93
|
+
throw new Error(`Provided token file directory ${pathToFile} is not a file or doesn't exist`);
|
|
94
|
+
}
|
|
95
|
+
const definition = fs.readFileSync(pathToFile, 'utf8');
|
|
96
|
+
const parsedDefinition = this.parseDefinition(definition);
|
|
97
|
+
return parsedDefinition;
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
throw new Error('Unable to load JSON definition file: ' + error);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
parseDefinition(definition) {
|
|
104
|
+
try {
|
|
105
|
+
const object = JSON.parse(definition);
|
|
106
|
+
if (typeof object !== 'object') {
|
|
107
|
+
throw new TypeError('Invalid Supernova mapping definition JSON file - root level entity must be object');
|
|
108
|
+
}
|
|
109
|
+
return object;
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
throw new Error('Invalid Supernova mapping definition JSON file - file structure invalid');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
processFileToMapping(mapping) {
|
|
116
|
+
const result = [];
|
|
117
|
+
for (const map of mapping.mapping) {
|
|
118
|
+
result.push({
|
|
119
|
+
bindToBrand: map.supernovaBrand,
|
|
120
|
+
bindToTheme: map.supernovaTheme ?? null,
|
|
121
|
+
nodes: null,
|
|
122
|
+
pluginSets: map.tokenSets ?? null,
|
|
123
|
+
pluginTheme: map.tokensTheme ?? null,
|
|
124
|
+
processedGroups: null,
|
|
125
|
+
processedNodes: null,
|
|
126
|
+
type: map.tokenSets ? sdk.DTPluginToSupernovaMapType.set : sdk.DTPluginToSupernovaMapType.theme,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
const settings = {
|
|
130
|
+
...mapping.settings,
|
|
131
|
+
dryRun: mapping.settings?.dryRun ?? false,
|
|
132
|
+
preciseCopy: sdk.toPreciseCopyStrategy(mapping.settings?.preciseCopy),
|
|
133
|
+
themeOverridesStrategy: mapping.settings?.themeOverridesStrategy ?? 'default',
|
|
134
|
+
verbose: mapping.settings?.verbose ?? false,
|
|
135
|
+
};
|
|
136
|
+
return {
|
|
137
|
+
mapping: result,
|
|
138
|
+
settings,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
weakValidateMapping(mapping) {
|
|
142
|
+
if (!Object.hasOwn(mapping, 'mode') ||
|
|
143
|
+
typeof mapping.mode !== 'string' ||
|
|
144
|
+
(mapping.mode !== 'multi-file' && mapping.mode !== 'single-file')) {
|
|
145
|
+
throw new Error('Unable to load mapping file: `mode` must be provided [single-file or multi-file]`');
|
|
146
|
+
}
|
|
147
|
+
if (!mapping.mapping || !Array.isArray(mapping.mapping)) {
|
|
148
|
+
throw new Error('Unable to load mapping file: `mapping` key must be present and array.');
|
|
149
|
+
}
|
|
150
|
+
const mapPack = mapping.mapping;
|
|
151
|
+
for (const map of mapPack) {
|
|
152
|
+
if (typeof map !== 'object') {
|
|
153
|
+
throw new TypeError('Unable to load mapping file: `mapping` must contain objects only');
|
|
154
|
+
}
|
|
155
|
+
if (!map.tokenSets && !map.tokensTheme) {
|
|
156
|
+
throw new Error('Unable to load mapping file: `mapping` must contain either `tokensTheme` or `tokenSets`');
|
|
157
|
+
}
|
|
158
|
+
if (map.tokenSets && map.tokensTheme) {
|
|
159
|
+
throw new Error('Unable to load mapping file: `mapping` must not contain both `tokensTheme` or `tokenSets`');
|
|
160
|
+
}
|
|
161
|
+
if (map.tokenSets && (!Array.isArray(map.tokenSets) || map.tokenSets.length === 0)) {
|
|
162
|
+
throw new Error('Unable to load mapping file: `mapping`.`tokenSets` must be an Array with at least one entry');
|
|
163
|
+
}
|
|
164
|
+
if (map.tokensTheme &&
|
|
165
|
+
((typeof map.tokensTheme !== 'string' && !Array.isArray(map.tokensTheme)) || map.tokensTheme.length === 0)) {
|
|
166
|
+
throw new Error('Unable to load mapping file: `mapping`.`tokensTheme` must be a non-empty string or non-empty array of strings');
|
|
167
|
+
}
|
|
168
|
+
if (!map.supernovaBrand || typeof map.supernovaBrand !== 'string' || map.supernovaBrand.length === 0) {
|
|
169
|
+
throw new Error('Unable to load mapping file: `supernovaBrand` must be a non-empty string');
|
|
170
|
+
}
|
|
171
|
+
if (map.supernovaTheme && (typeof map.supernovaTheme !== 'string' || map.supernovaTheme.length === 0)) {
|
|
172
|
+
throw new Error('Unable to load mapping file: `supernovaTheme` may be empty but must be non-empty string if not');
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (mapping.settings) {
|
|
176
|
+
if (typeof mapping.settings !== 'object') {
|
|
177
|
+
throw new TypeError('Unable to load mapping file: `settings` must be an object');
|
|
178
|
+
}
|
|
179
|
+
if (Object.hasOwn(mapping.settings, 'dryRun') && typeof mapping.settings.dryRun !== 'boolean') {
|
|
180
|
+
throw new Error('Unable to load mapping file: `dryRun` must be of boolean type');
|
|
181
|
+
}
|
|
182
|
+
if (Object.hasOwn(mapping.settings, 'verbose') && typeof mapping.settings.verbose !== 'boolean') {
|
|
183
|
+
throw new Error('Unable to load mapping file: `verbose` must be of boolean type');
|
|
184
|
+
}
|
|
185
|
+
if (Object.hasOwn(mapping.settings, 'preciseCopy') &&
|
|
186
|
+
typeof mapping.settings.preciseCopy !== 'boolean' &&
|
|
187
|
+
typeof mapping.settings.preciseCopy !== 'string') {
|
|
188
|
+
throw new Error('Unable to load mapping file: `preciseCopy` must be of boolean or string type');
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=figma-tokens-data-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"figma-tokens-data-loader.js","sourceRoot":"","sources":["../../src/utils/figma-tokens-data-loader.ts"],"names":[],"mappings":"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","sourcesContent":["import * as sdk from '@supernovaio/sdk'\nimport * as fs from 'node:fs'\n\nexport class FigmaTokensDataLoader {\n loadConfigFromPath(pathToFile: string): {\n mapping: sdk.DTPluginToSupernovaMapPack\n settings: sdk.DTPluginToSupernovaSettings\n } {\n try {\n const parsedDefinition = this.loadConfigFromPathAsIs(pathToFile) as sdk.DTPluginToSupernovaMappingFile\n this.weakValidateMapping(parsedDefinition)\n return this.processFileToMapping(parsedDefinition)\n } catch (error) {\n throw new Error('Unable to load JSON definition file: ' + error)\n }\n }\n\n loadConfigFromPathAsIs(pathToFile: string): sdk.DTPluginToSupernovaMappingFile {\n try {\n if (!(fs.existsSync(pathToFile) && fs.lstatSync(pathToFile).isFile())) {\n throw new Error(`Provided configuration file directory ${pathToFile} is not a file or doesn't exist`)\n }\n\n const definition = fs.readFileSync(pathToFile, 'utf8')\n const parsedDefinition = this.parseDefinition(definition) as sdk.DTPluginToSupernovaMappingFile\n return parsedDefinition\n } catch (error) {\n throw new Error('Unable to load JSON definition file: ' + error)\n }\n }\n\n async loadTokensFromDirectory(pathToDirectory: string, settingsPath: string): Promise<object> {\n try {\n const fullStructuredObject: Record<string, unknown> = {}\n\n if (!(fs.existsSync(pathToDirectory) && fs.lstatSync(pathToDirectory).isDirectory())) {\n throw new Error(`Provided data directory ${pathToDirectory} is not a directory or doesn't exist`)\n }\n\n const jsonPaths = this.getAllJSONFiles(pathToDirectory)\n for (const path of jsonPaths) {\n if (path.endsWith('json') && path !== settingsPath && !path.includes('$')) {\n // eslint-disable-next-line no-await-in-loop\n const result = await this.loadObjectFile(path)\n if (typeof result === 'object') {\n // let name = this.getFileNameWithoutExtension(path)\n const name = this.getSetKey(path, pathToDirectory)\n fullStructuredObject[name] = result\n }\n }\n }\n\n // Try to load themes, if any\n // eslint-disable-next-line no-useless-concat\n const themePath = pathToDirectory + '/' + '$themes.json'\n if (fs.existsSync(themePath)) {\n const themes = await this.loadObjectFile(themePath)\n fullStructuredObject.$themes = themes\n }\n\n // Try to load metadata, if any\n // eslint-disable-next-line no-useless-concat\n const metadataPath = pathToDirectory + '/' + '$metadata.json'\n if (fs.existsSync(metadataPath)) {\n const metadata = await this.loadObjectFile(metadataPath)\n fullStructuredObject.$metadata = metadata\n }\n\n return fullStructuredObject\n } catch (error) {\n throw new Error('Unable to load JSON definition file: ' + error)\n }\n }\n\n /** Load token definitions from path */\n async loadTokensFromPath(pathToFile: string): Promise<object> {\n try {\n if (!(fs.existsSync(pathToFile) && fs.lstatSync(pathToFile).isFile())) {\n throw new Error(`Provided token file directory ${pathToFile} is not a file or doesn't exist`)\n }\n\n const definition = fs.readFileSync(pathToFile, 'utf8')\n const parsedDefinition = this.parseDefinition(definition)\n return parsedDefinition\n } catch (error) {\n throw new Error('Unable to load JSON definition file: ' + error)\n }\n }\n\n private getAllJSONFiles(dir: string): string[] {\n const files = fs.readdirSync(dir)\n const jsonFiles = []\n\n for (const file of files) {\n const filePath = `${dir}/${file}`\n const fileStat = fs.statSync(filePath)\n\n if (fileStat.isDirectory()) {\n jsonFiles.push(...this.getAllJSONFiles(filePath))\n } else if (fileStat.isFile() && filePath.endsWith('.json')) {\n jsonFiles.push(filePath)\n }\n }\n\n return jsonFiles\n }\n\n private getSetKey(jsonFilePath: string, loadedDirectory: string): string {\n return jsonFilePath.slice(loadedDirectory.length + 1, -5)\n }\n\n private async loadObjectFile(pathToFile: string): Promise<object> {\n try {\n if (!(fs.existsSync(pathToFile) && fs.lstatSync(pathToFile).isFile())) {\n throw new Error(`Provided token file directory ${pathToFile} is not a file or doesn't exist`)\n }\n\n const definition = fs.readFileSync(pathToFile, 'utf8')\n const parsedDefinition = this.parseDefinition(definition)\n return parsedDefinition\n } catch (error) {\n throw new Error('Unable to load JSON definition file: ' + error)\n }\n }\n\n private parseDefinition(definition: string): object {\n try {\n const object = JSON.parse(definition)\n if (typeof object !== 'object') {\n throw new TypeError('Invalid Supernova mapping definition JSON file - root level entity must be object')\n }\n\n return object\n } catch {\n throw new Error('Invalid Supernova mapping definition JSON file - file structure invalid')\n }\n }\n\n // --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---\n // MARK: - File Parser\n\n private processFileToMapping(mapping: sdk.DTPluginToSupernovaMappingFile): {\n mapping: sdk.DTPluginToSupernovaMapPack\n settings: sdk.DTPluginToSupernovaSettings\n } {\n const result: sdk.DTPluginToSupernovaMap[] = []\n for (const map of mapping.mapping) {\n result.push({\n bindToBrand: map.supernovaBrand,\n bindToTheme: map.supernovaTheme ?? null,\n nodes: null,\n pluginSets: map.tokenSets ?? null,\n pluginTheme: map.tokensTheme ?? null,\n processedGroups: null,\n processedNodes: null,\n type: map.tokenSets ? sdk.DTPluginToSupernovaMapType.set : sdk.DTPluginToSupernovaMapType.theme,\n })\n }\n\n const settings: sdk.DTPluginToSupernovaSettings = {\n ...mapping.settings,\n dryRun: mapping.settings?.dryRun ?? false,\n preciseCopy: sdk.toPreciseCopyStrategy(mapping.settings?.preciseCopy),\n themeOverridesStrategy:\n mapping.settings?.themeOverridesStrategy ?? ('default' as sdk.DTPluginThemeOverrideStrategy),\n verbose: mapping.settings?.verbose ?? false,\n }\n\n return {\n mapping: result,\n settings,\n }\n }\n\n private weakValidateMapping(mapping: sdk.DTPluginToSupernovaMappingFile) {\n if (\n !Object.hasOwn(mapping, 'mode') ||\n typeof mapping.mode !== 'string' ||\n (mapping.mode !== 'multi-file' && mapping.mode !== 'single-file')\n ) {\n throw new Error('Unable to load mapping file: `mode` must be provided [single-file or multi-file]`')\n }\n\n if (!mapping.mapping || !Array.isArray(mapping.mapping)) {\n throw new Error('Unable to load mapping file: `mapping` key must be present and array.')\n }\n\n const mapPack = mapping.mapping\n for (const map of mapPack) {\n if (typeof map !== 'object') {\n throw new TypeError('Unable to load mapping file: `mapping` must contain objects only')\n }\n\n if (!map.tokenSets && !map.tokensTheme) {\n throw new Error('Unable to load mapping file: `mapping` must contain either `tokensTheme` or `tokenSets`')\n }\n\n if (map.tokenSets && map.tokensTheme) {\n throw new Error('Unable to load mapping file: `mapping` must not contain both `tokensTheme` or `tokenSets`')\n }\n\n if (map.tokenSets && (!Array.isArray(map.tokenSets) || (map.tokenSets as Array<unknown>).length === 0)) {\n throw new Error('Unable to load mapping file: `mapping`.`tokenSets` must be an Array with at least one entry')\n }\n\n if (\n map.tokensTheme &&\n ((typeof map.tokensTheme !== 'string' && !Array.isArray(map.tokensTheme)) || map.tokensTheme.length === 0)\n ) {\n throw new Error(\n 'Unable to load mapping file: `mapping`.`tokensTheme` must be a non-empty string or non-empty array of strings',\n )\n }\n\n if (!map.supernovaBrand || typeof map.supernovaBrand !== 'string' || map.supernovaBrand.length === 0) {\n throw new Error('Unable to load mapping file: `supernovaBrand` must be a non-empty string')\n }\n\n if (map.supernovaTheme && (typeof map.supernovaTheme !== 'string' || map.supernovaTheme.length === 0)) {\n throw new Error(\n 'Unable to load mapping file: `supernovaTheme` may be empty but must be non-empty string if not',\n )\n }\n }\n\n if (mapping.settings) {\n if (typeof mapping.settings !== 'object') {\n throw new TypeError('Unable to load mapping file: `settings` must be an object')\n }\n\n if (Object.hasOwn(mapping.settings, 'dryRun') && typeof mapping.settings.dryRun !== 'boolean') {\n throw new Error('Unable to load mapping file: `dryRun` must be of boolean type')\n }\n\n if (Object.hasOwn(mapping.settings, 'verbose') && typeof mapping.settings.verbose !== 'boolean') {\n throw new Error('Unable to load mapping file: `verbose` must be of boolean type')\n }\n\n if (\n Object.hasOwn(mapping.settings, 'preciseCopy') &&\n typeof mapping.settings.preciseCopy !== 'boolean' &&\n typeof mapping.settings.preciseCopy !== 'string'\n ) {\n throw new Error('Unable to load mapping file: `preciseCopy` must be of boolean or string type')\n }\n }\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAA","sourcesContent":["export * from './api-client.js'\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,wBAAgB,cAAc,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CASjF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { match } from "ts-pattern";
|
|
2
|
+
import { Environment } from "../types/index.js";
|
|
3
|
+
export function environmentAPI(environment, version) {
|
|
4
|
+
const versionFragment = version ? `/${version}` : "";
|
|
5
|
+
return match(environment)
|
|
6
|
+
.with(Environment.demo, () => `https://api.demo.supernova.io/api${versionFragment}`)
|
|
7
|
+
.with(Environment.development, () => `https://api.dev.supernova.io/api${versionFragment}`)
|
|
8
|
+
.with(Environment.production, () => `https://api.supernova.io/api${versionFragment}`)
|
|
9
|
+
.with(Environment.staging, () => `https://api.staging.supernova.io/api${versionFragment}`)
|
|
10
|
+
.with(Environment.local, () => ` https://api-5.${process.env.LOCAL_STAGE}.sst.supernova.io/api${versionFragment}`)
|
|
11
|
+
.exhaustive();
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=network.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/utils/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAElC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAG/C,MAAM,UAAU,cAAc,CAAC,WAAwB,EAAE,OAAgB;IACvE,MAAM,eAAe,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;IACpD,OAAO,KAAK,CAAC,WAAW,CAAC;SACtB,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,oCAAoC,eAAe,EAAE,CAAC;SACnF,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,mCAAmC,eAAe,EAAE,CAAC;SACzF,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,+BAA+B,eAAe,EAAE,CAAC;SACpF,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,uCAAuC,eAAe,EAAE,CAAC;SACzF,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,kBAAkB,OAAO,CAAC,GAAG,CAAC,WAAW,wBAAwB,eAAe,EAAE,CAAC;SACjH,UAAU,EAAE,CAAA;AACjB,CAAC","sourcesContent":["import { match } from \"ts-pattern\"\n\nimport { Environment } from \"../types/index.js\"\n\n/** Retrieve URL for the DSM access. This can be both used inside extension to configure the internal requests as well as inside pulsar bridge */\nexport function environmentAPI(environment: Environment, version?: string): string {\n const versionFragment = version ? `/${version}` : \"\"\n return match(environment)\n .with(Environment.demo, () => `https://api.demo.supernova.io/api${versionFragment}`)\n .with(Environment.development, () => `https://api.dev.supernova.io/api${versionFragment}`)\n .with(Environment.production, () => `https://api.supernova.io/api${versionFragment}`)\n .with(Environment.staging, () => `https://api.staging.supernova.io/api${versionFragment}`)\n .with(Environment.local, () => ` https://api-5.${process.env.LOCAL_STAGE}.sst.supernova.io/api${versionFragment}`)\n .exhaustive()\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as pulsar from '@supernova-studio/pulsar-language';
|
|
2
|
+
import { Environment, ExportConfiguration } from '../../types/index.js';
|
|
3
|
+
export declare function exportConfiguration(setup: {
|
|
4
|
+
apiKey: string;
|
|
5
|
+
brandId?: string;
|
|
6
|
+
dsId: string;
|
|
7
|
+
environment: Environment;
|
|
8
|
+
exportPath: string;
|
|
9
|
+
logger: pulsar.PLLogger;
|
|
10
|
+
proxyUrl?: string;
|
|
11
|
+
themeId?: string;
|
|
12
|
+
versionId: string;
|
|
13
|
+
}): ExportConfiguration;
|
|
14
|
+
//# sourceMappingURL=exporter-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exporter-utils.d.ts","sourceRoot":"","sources":["../../../src/utils/run-exporter/exporter-utils.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,MAAM,MAAM,mCAAmC,CAAA;AAE3D,OAAO,EAAC,WAAW,EAAE,mBAAmB,EAAC,MAAM,sBAAsB,CAAA;AAMrE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,WAAW,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;CAClB,GAAG,mBAAmB,CAatB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { environmentAPI } from '../network.js';
|
|
2
|
+
export function exportConfiguration(setup) {
|
|
3
|
+
return {
|
|
4
|
+
accessToken: setup.apiKey,
|
|
5
|
+
apiUrl: environmentAPI(setup.environment),
|
|
6
|
+
apiVersion: '0.2',
|
|
7
|
+
brandId: setup.brandId,
|
|
8
|
+
designSystemId: setup.dsId,
|
|
9
|
+
designSystemVersionId: setup.versionId,
|
|
10
|
+
exportPath: setup.exportPath,
|
|
11
|
+
logger: setup.logger,
|
|
12
|
+
proxyUrl: setup.proxyUrl,
|
|
13
|
+
themeId: setup.themeId,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=exporter-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exporter-utils.js","sourceRoot":"","sources":["../../../src/utils/run-exporter/exporter-utils.ts"],"names":[],"mappings":"AAeA,OAAO,EAAC,cAAc,EAAC,MAAM,eAAe,CAAA;AAK5C,MAAM,UAAU,mBAAmB,CAAC,KAUnC;IACC,OAAO;QACL,WAAW,EAAE,KAAK,CAAC,MAAM;QACzB,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,WAAW,CAAC;QACzC,UAAU,EAAE,KAAK;QACjB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,cAAc,EAAE,KAAK,CAAC,IAAI;QAC1B,qBAAqB,EAAE,KAAK,CAAC,SAAS;QACtC,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAA;AACH,CAAC","sourcesContent":["//\n// exporter-utils.ts\n// Supernova CLI\n//\n// Created by Jiri Trecak.\n// Copyright © Supernova.io. All rights reserved.\n//\n\n// --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---\n// MARK: - Imports\n\n// eslint-disable-next-line n/no-extraneous-import\nimport * as pulsar from '@supernova-studio/pulsar-language'\n\nimport {Environment, ExportConfiguration} from '../../types/index.js'\nimport {environmentAPI} from '../network.js'\n\n// --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---\n// MARK: - Utils\n\nexport function exportConfiguration(setup: {\n apiKey: string\n brandId?: string\n dsId: string\n environment: Environment\n exportPath: string\n logger: pulsar.PLLogger\n proxyUrl?: string\n themeId?: string\n versionId: string\n}): ExportConfiguration {\n return {\n accessToken: setup.apiKey,\n apiUrl: environmentAPI(setup.environment),\n apiVersion: '0.2',\n brandId: setup.brandId,\n designSystemId: setup.dsId,\n designSystemVersionId: setup.versionId,\n exportPath: setup.exportPath,\n logger: setup.logger,\n proxyUrl: setup.proxyUrl,\n themeId: setup.themeId,\n }\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as sdkTypes from "@supernovaio/sdk";
|
|
2
|
+
import "colors";
|
|
3
|
+
export interface DefaultDesignSystemFlags {
|
|
4
|
+
apiKey: string;
|
|
5
|
+
apiUrl?: string;
|
|
6
|
+
brandId?: string;
|
|
7
|
+
designSystemId: string;
|
|
8
|
+
environment: string;
|
|
9
|
+
proxyUrl?: string;
|
|
10
|
+
themeId?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function getWritableVersion(flags: DefaultDesignSystemFlags, apiVersion?: string): Promise<{
|
|
13
|
+
brand: null | sdkTypes.Brand;
|
|
14
|
+
designSystem: sdkTypes.DesignSystem;
|
|
15
|
+
id: sdkTypes.RemoteWorkspaceVersionIdentifier;
|
|
16
|
+
instance: sdkTypes.Supernova;
|
|
17
|
+
theme: null | sdkTypes.TokenTheme;
|
|
18
|
+
version: sdkTypes.DesignSystemVersion;
|
|
19
|
+
}>;
|
|
20
|
+
//# sourceMappingURL=sdk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.d.ts","sourceRoot":"","sources":["../../src/utils/sdk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,kBAAkB,CAAA;AAM5C,OAAO,QAAQ,CAAA;AAOf,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,wBAAwB,EAC/B,UAAU,GAAE,MAAa,GACxB,OAAO,CAAC;IACT,KAAK,EAAE,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAA;IAC5B,YAAY,EAAE,QAAQ,CAAC,YAAY,CAAA;IACnC,EAAE,EAAE,QAAQ,CAAC,gCAAgC,CAAA;IAC7C,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAA;IAC5B,KAAK,EAAE,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAA;IACjC,OAAO,EAAE,QAAQ,CAAC,mBAAmB,CAAA;CACtC,CAAC,CAyDD"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
import "colors";
|
|
3
|
+
import { environmentAPI } from "./network.js";
|
|
4
|
+
const require = createRequire(import.meta.url);
|
|
5
|
+
const sdkProvider = require("@supernovaio/sdk");
|
|
6
|
+
export async function getWritableVersion(flags, apiVersion = "v2") {
|
|
7
|
+
if (!flags.apiKey || flags.apiKey.length === 0) {
|
|
8
|
+
throw new Error(`API key must not be empty`);
|
|
9
|
+
}
|
|
10
|
+
if (!flags.designSystemId || flags.designSystemId.length === 0) {
|
|
11
|
+
throw new Error(`Design System ID must not be empty`);
|
|
12
|
+
}
|
|
13
|
+
const apiUrl = flags.apiUrl && flags.apiUrl.length > 0
|
|
14
|
+
? flags.apiUrl
|
|
15
|
+
: environmentAPI(flags.environment, apiVersion);
|
|
16
|
+
const instance = new sdkProvider.Supernova(flags.apiKey, {
|
|
17
|
+
apiUrl,
|
|
18
|
+
bypassEnvFetch: true,
|
|
19
|
+
proxyUrl: flags.proxyUrl,
|
|
20
|
+
});
|
|
21
|
+
const designSystem = await instance.designSystems.designSystem(flags.designSystemId);
|
|
22
|
+
if (!designSystem) {
|
|
23
|
+
throw new Error(`Design system ${flags.designSystemId} not found or not available under provided API key`);
|
|
24
|
+
}
|
|
25
|
+
const version = await instance.versions.getActiveVersion(flags.designSystemId);
|
|
26
|
+
if (!version) {
|
|
27
|
+
throw new Error(`Design system ${flags.designSystemId} writable version not found or not available under provided API key`);
|
|
28
|
+
}
|
|
29
|
+
const id = {
|
|
30
|
+
designSystemId: flags.designSystemId,
|
|
31
|
+
versionId: version.id,
|
|
32
|
+
workspaceId: designSystem.workspaceId,
|
|
33
|
+
};
|
|
34
|
+
let brand = null;
|
|
35
|
+
if (flags.brandId) {
|
|
36
|
+
const brands = await instance.brands.getBrands(id);
|
|
37
|
+
brand = brands.find(brand => brand.id === flags.brandId || brand.idInVersion === flags.brandId) ?? null;
|
|
38
|
+
if (!brand) {
|
|
39
|
+
throw new Error(`Brand ${flags.brandId} not found in specified design system`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
let theme = null;
|
|
43
|
+
if (flags.themeId) {
|
|
44
|
+
const themes = await instance.tokens.getTokenThemes(id);
|
|
45
|
+
theme = themes.find(theme => theme.id === flags.themeId || theme.idInVersion === flags.themeId) ?? null;
|
|
46
|
+
if (!theme) {
|
|
47
|
+
throw new Error(`Theme ${flags.themeId} not found in specified brand`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return { brand, designSystem, id, instance, theme, version };
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../src/utils/sdk.ts"],"names":[],"mappings":"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","sourcesContent":["import * as sdkTypes from \"@supernovaio/sdk\"\nimport { createRequire } from \"node:module\"\n\nimport { Environment } from \"../types/index.js\"\n\n// eslint-disable-next-line no-restricted-imports\nimport \"colors\"\n\nimport { environmentAPI } from \"./network.js\"\n\nconst require = createRequire(import.meta.url)\nconst sdkProvider = require(\"@supernovaio/sdk\") as typeof sdkTypes\n\nexport interface DefaultDesignSystemFlags {\n apiKey: string\n apiUrl?: string\n brandId?: string\n designSystemId: string\n environment: string\n proxyUrl?: string\n themeId?: string\n}\n\nexport async function getWritableVersion(\n flags: DefaultDesignSystemFlags,\n apiVersion: string = \"v2\",\n): Promise<{\n brand: null | sdkTypes.Brand\n designSystem: sdkTypes.DesignSystem\n id: sdkTypes.RemoteWorkspaceVersionIdentifier\n instance: sdkTypes.Supernova\n theme: null | sdkTypes.TokenTheme\n version: sdkTypes.DesignSystemVersion\n}> {\n if (!flags.apiKey || flags.apiKey.length === 0) {\n throw new Error(`API key must not be empty`)\n }\n\n if (!flags.designSystemId || flags.designSystemId.length === 0) {\n throw new Error(`Design System ID must not be empty`)\n }\n\n // Create instance for prod / dev\n const apiUrl =\n flags.apiUrl && flags.apiUrl.length > 0\n ? flags.apiUrl\n : environmentAPI(flags.environment as Environment, apiVersion)\n const instance = new sdkProvider.Supernova(flags.apiKey, {\n apiUrl,\n bypassEnvFetch: true,\n proxyUrl: flags.proxyUrl,\n })\n\n const designSystem = await instance.designSystems.designSystem(flags.designSystemId)\n if (!designSystem) {\n throw new Error(`Design system ${flags.designSystemId} not found or not available under provided API key`)\n }\n\n const version = await instance.versions.getActiveVersion(flags.designSystemId)\n if (!version) {\n throw new Error(\n `Design system ${flags.designSystemId} writable version not found or not available under provided API key`,\n )\n }\n\n const id: sdkTypes.RemoteWorkspaceVersionIdentifier = {\n designSystemId: flags.designSystemId,\n versionId: version.id,\n workspaceId: designSystem.workspaceId,\n }\n\n let brand: null | sdkTypes.Brand = null\n if (flags.brandId) {\n const brands = await instance.brands.getBrands(id)\n brand = brands.find(brand => brand.id === flags.brandId || brand.idInVersion === flags.brandId) ?? null\n if (!brand) {\n throw new Error(`Brand ${flags.brandId} not found in specified design system`)\n }\n }\n\n let theme: null | sdkTypes.TokenTheme = null\n if (flags.themeId) {\n const themes = await instance.tokens.getTokenThemes(id)\n theme = themes.find(theme => theme.id === flags.themeId || theme.idInVersion === flags.themeId) ?? null\n if (!theme) {\n throw new Error(`Theme ${flags.themeId} not found in specified brand`)\n }\n }\n\n return { brand, designSystem, id, instance, theme, version }\n}\n"]}
|