@futurebrand/dev-tools 2.7.0 → 2.7.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.
@@ -4,7 +4,9 @@ declare class FigmaModule {
4
4
  private api;
5
5
  constructor(state: AIState);
6
6
  private addVariantsToBlock;
7
- private getDefaultCheckedBlocks;
7
+ private getNewBlocks;
8
+ private getBlocksDataFromFigma;
9
+ private getDefaultBlocks;
8
10
  loadBlocks(): Promise<void>;
9
11
  }
10
12
  export default FigmaModule;
@@ -19,35 +19,25 @@ class FigmaModule {
19
19
  data.variants.push(variant);
20
20
  }
21
21
  }
22
- async getDefaultCheckedBlocks(blocks) {
22
+ async getNewBlocks(blocks) {
23
23
  const data = this.state.getData();
24
- const defaultBlocks = [];
24
+ const newBlocks = [];
25
25
  const nextProject = data.projects.find((project) => project.type === 'next.js');
26
+ if (!nextProject) {
27
+ return [];
28
+ }
26
29
  for (const block of blocks) {
27
- if (nextProject) {
28
- const alreadyGenerated = await this.state.file.verifyBlockAlreadyGenerated(block.name, nextProject);
29
- if (alreadyGenerated) {
30
- continue;
31
- }
32
- const alreadyExist = await this.state.file.verifyBlockAlreadyExists(nextProject, block.name);
33
- if (alreadyExist) {
34
- continue;
35
- }
36
- }
37
- if (!block.hidden) {
38
- defaultBlocks.push(block.name);
30
+ const alreadyExist = await this.state.file.verifyBlockAlreadyExists(nextProject, block.name);
31
+ if (!alreadyExist) {
32
+ newBlocks.push(block.name);
39
33
  }
40
34
  }
41
- return defaultBlocks;
35
+ return newBlocks;
42
36
  }
43
- async loadBlocks() {
44
- console.log('- Finding figma blocks canvas... Please wait');
45
- const data = this.state.getData();
46
- const figmaPageID = data.configs.figma;
37
+ async getBlocksDataFromFigma(figmaPageID) {
47
38
  const canvas = await this.api.getBlockCanvas(figmaPageID);
48
- console.log('- Loading pages blocks');
49
- const blocksData = [];
50
39
  const blocks = await this.api.getBlocks(figmaPageID, canvas);
40
+ const blocksData = [];
51
41
  Object.keys(blocks).forEach((blockName) => {
52
42
  let block = blocksData.find((block) => block.name === blockName);
53
43
  if (!block) {
@@ -55,31 +45,51 @@ class FigmaModule {
55
45
  name: blockName,
56
46
  variants: [],
57
47
  hidden: false,
58
- generated: false,
59
48
  };
60
49
  blocksData.push(block);
61
50
  }
62
51
  this.addVariantsToBlock(block, blocks[blockName]);
63
52
  });
64
- const blockNames = blocksData.map((block) => block.name);
65
- console.log(`- Loaded ${blocksData.length} blocks from Figma (${blockNames.length} new)`);
66
- const defaultCheckedBlocks = await this.getDefaultCheckedBlocks(blocksData);
67
- if (blockNames.length) {
68
- const query = await inquirer_1.default.prompt([
69
- {
70
- type: 'checkbox',
71
- name: 'blocks',
72
- message: 'What blocks do you want to use?',
73
- choices: blockNames,
74
- default: defaultCheckedBlocks,
75
- },
76
- ]);
77
- for (const blockName of blockNames) {
78
- const block = blocksData.find((b) => b.name === blockName);
79
- if (block) {
80
- const isNotHidden = query.blocks.includes(blockName);
81
- block.hidden = !isNotHidden;
82
- }
53
+ return blocksData;
54
+ }
55
+ getDefaultBlocks(blockNames) {
56
+ try {
57
+ const blocks = this.state.getData().blocks;
58
+ return blockNames.filter((blockName) => {
59
+ const block = blocks.find((b) => b.name === blockName);
60
+ return block ? !block.hidden : true;
61
+ });
62
+ }
63
+ catch {
64
+ return blockNames;
65
+ }
66
+ }
67
+ async loadBlocks() {
68
+ console.log('- Finding figma blocks canvas... Please wait');
69
+ const data = this.state.getData();
70
+ console.log('- Loading pages blocks');
71
+ const blocksData = await this.getBlocksDataFromFigma(data.configs.figma);
72
+ const newBlocks = await this.getNewBlocks(blocksData);
73
+ if (newBlocks.length === 0) {
74
+ console.log('- No new blocks found in Figma');
75
+ return;
76
+ }
77
+ const defaultBlocks = this.getDefaultBlocks(newBlocks);
78
+ console.log(`- Loaded ${blocksData.length} blocks from Figma ${blocksData.length !== newBlocks.length ? `(${newBlocks.length} new)` : ''}`);
79
+ const query = await inquirer_1.default.prompt([
80
+ {
81
+ type: 'checkbox',
82
+ name: 'blocks',
83
+ message: 'What blocks do you want to use?',
84
+ choices: newBlocks,
85
+ default: defaultBlocks,
86
+ },
87
+ ]);
88
+ for (const blockName of newBlocks) {
89
+ const block = blocksData.find((b) => b.name === blockName);
90
+ if (block) {
91
+ const isNotHidden = query.blocks.includes(blockName);
92
+ block.hidden = !isNotHidden;
83
93
  }
84
94
  }
85
95
  this.state.setBlocks(blocksData);
@@ -19,7 +19,6 @@ declare class AIState {
19
19
  getAvailableBlocksNames(filters?: IAvailableFilters): string[];
20
20
  setBlocks(blocks: IAIFileState['blocks']): void;
21
21
  setColors(colors: IAIFileState['colors']): void;
22
- setBlockGenerated(blockName: string, generated?: boolean): void;
23
22
  getBlockVariants(blockName: string): any[];
24
23
  setBlockHidden(blockName: string, hidden?: boolean): void;
25
24
  static init(): Promise<AIState>;
@@ -20,13 +20,9 @@ class AIState {
20
20
  {
21
21
  type: 'input',
22
22
  name: 'apiUrl',
23
+ default: 'http://localhost:3333',
23
24
  message: 'What is the AI API url?',
24
25
  },
25
- {
26
- type: 'input',
27
- name: 'apiToken',
28
- message: 'What is the AI API token?',
29
- },
30
26
  {
31
27
  type: 'input',
32
28
  name: 'page',
@@ -37,7 +33,6 @@ class AIState {
37
33
  return {
38
34
  configs: {
39
35
  api: query.apiUrl,
40
- token: query.apiToken,
41
36
  figma: query.page,
42
37
  },
43
38
  projects,
@@ -84,9 +79,6 @@ class AIState {
84
79
  if (hidden != null && block.hidden !== hidden) {
85
80
  return false;
86
81
  }
87
- if (generated != null && block.generated !== generated) {
88
- return false;
89
- }
90
82
  return true;
91
83
  });
92
84
  }
@@ -105,13 +97,6 @@ class AIState {
105
97
  }
106
98
  this.data.colors = colors;
107
99
  }
108
- setBlockGenerated(blockName, generated = true) {
109
- const blocks = this.getData().blocks;
110
- const block = blocks.find((block) => block.name === blockName);
111
- if (block) {
112
- block.generated = generated;
113
- }
114
- }
115
100
  getBlockVariants(blockName) {
116
101
  const blocks = this.getData().blocks.find((block) => block.name === blockName);
117
102
  return blocks?.variants || [];
@@ -7,7 +7,6 @@ export interface IStateConfigs extends IServerConfigs {
7
7
  export interface IBlockData {
8
8
  name: string;
9
9
  hidden: boolean;
10
- generated: boolean;
11
10
  variants: IFigmaNode[];
12
11
  }
13
12
  export interface IProjectColor {
@@ -2,7 +2,6 @@ import type { IServerConfigs } from './types';
2
2
  declare class AIServerModule implements IServerConfigs {
3
3
  private filePath;
4
4
  api: string;
5
- token: string;
6
5
  constructor();
7
6
  private createConfigs;
8
7
  create(): Promise<void>;
@@ -16,7 +16,6 @@ const longTimeoutAgent = new undici_1.Agent({
16
16
  class AIServerModule {
17
17
  filePath = '';
18
18
  api = '';
19
- token = '';
20
19
  constructor() {
21
20
  (0, node_net_1.setDefaultAutoSelectFamilyAttemptTimeout)(TIMEOUT_LIMIT_TIME);
22
21
  }
@@ -25,23 +24,17 @@ class AIServerModule {
25
24
  {
26
25
  type: 'input',
27
26
  name: 'apiUrl',
27
+ default: 'http://localhost:3333',
28
28
  message: 'What is the AI API url?',
29
29
  },
30
- {
31
- type: 'input',
32
- name: 'apiToken',
33
- message: 'What is the AI API token?',
34
- },
35
30
  ]);
36
31
  return {
37
32
  api: query.apiUrl,
38
- token: query.apiToken,
39
33
  };
40
34
  }
41
35
  async create() {
42
36
  const configs = await this.createConfigs();
43
37
  this.api = configs.api;
44
- this.token = configs.token;
45
38
  }
46
39
  async fetchApi(path, init) {
47
40
  if (!this.isReady) {
@@ -55,7 +48,6 @@ class AIServerModule {
55
48
  ...init,
56
49
  headers: {
57
50
  'Content-Type': 'application/json',
58
- Authorization: `Bearer ${this.token}`,
59
51
  ...init?.headers,
60
52
  },
61
53
  signal: AbortSignal.timeout(TIMEOUT_LIMIT_TIME),
@@ -83,7 +75,6 @@ class AIServerModule {
83
75
  }
84
76
  setApiConfigs(configs) {
85
77
  this.api = configs.api;
86
- this.token = configs.token;
87
78
  }
88
79
  async save() {
89
80
  if (!this.isReady) {
@@ -92,11 +83,10 @@ class AIServerModule {
92
83
  const filePath = this.filePath || (await (0, files_1.getTempFilePath)(FILE_NAME));
93
84
  await (0, files_1.writeJSONFile)(filePath, {
94
85
  api: this.api,
95
- token: this.token,
96
86
  });
97
87
  }
98
88
  get isReady() {
99
- return this.api !== '' && this.token !== '';
89
+ return this.api !== '';
100
90
  }
101
91
  }
102
92
  exports.default = AIServerModule;
@@ -1,4 +1,3 @@
1
1
  export interface IServerConfigs {
2
2
  api: string;
3
- token: string;
4
3
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@futurebrand/dev-tools",
3
- "version": "2.7.0",
3
+ "version": "2.7.1",
4
4
  "description": "FutureBrand Dev Tools",
5
5
  "scripts": {
6
6
  "build": "tsc && tsc-alias",