@auto-engineer/design-system-importer 0.1.2 → 0.2.0

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.
@@ -1,5 +1,5 @@
1
1
 
2
- > @auto-engineer/design-system-importer@0.1.2 build /home/runner/work/auto-engineer/auto-engineer/packages/design-system-importer
2
+ > @auto-engineer/design-system-importer@0.2.0 build /home/runner/work/auto-engineer/auto-engineer/packages/design-system-importer
3
3
  > tsc && tsx ../../scripts/fix-esm-imports.ts
4
4
 
5
5
  Fixed ESM imports in dist/
@@ -0,0 +1,12 @@
1
+
2
+ > @auto-engineer/design-system-importer@0.2.0 test /home/runner/work/auto-engineer/auto-engineer/packages/design-system-importer
3
+ > vitest run
4
+
5
+
6
+  RUN  v3.2.4 /home/runner/work/auto-engineer/auto-engineer/packages/design-system-importer
7
+
8
+ include: **/*.specs.{js,ts}
9
+ No test files found, exiting with code 0
10
+ exclude: **/.tmp/**, **/node_modules/**, **/dist/**
11
+
12
+
@@ -0,0 +1,4 @@
1
+
2
+ > @auto-engineer/design-system-importer@0.2.0 type-check /home/runner/work/auto-engineer/auto-engineer/packages/design-system-importer
3
+ > tsc --noEmit
4
+
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @auto-engineer/design-system-importer
2
2
 
3
+ ## 0.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#24](https://github.com/SamHatoum/auto-engineer/pull/24) [`d4dcacd`](https://github.com/SamHatoum/auto-engineer/commit/d4dcacd18cf2217d3ac9f4354f79ab7ff2ba39a0) Thanks [@SamHatoum](https://github.com/SamHatoum)! - Making commands independent and CLI based
8
+
9
+ - [#22](https://github.com/SamHatoum/auto-engineer/pull/22) [`e39acf3`](https://github.com/SamHatoum/auto-engineer/commit/e39acf31e9051652084d0de99cf8c89b40e6531c) Thanks [@SamHatoum](https://github.com/SamHatoum)! - Some major refactorings of the directory structure
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies [[`e39acf3`](https://github.com/SamHatoum/auto-engineer/commit/e39acf31e9051652084d0de99cf8c89b40e6531c)]:
14
+ - @auto-engineer/message-bus@0.1.0
15
+
3
16
  ## 0.1.2
4
17
 
5
18
  ### Patch Changes
package/README.md ADDED
@@ -0,0 +1,48 @@
1
+ # Design System Importer
2
+
3
+ Pull in your team’s design system to build consistent, on-brand apps—fast.
4
+ Easily sync shared styles, components, and tokens from design tools or code.
5
+
6
+ ## Available Importers
7
+
8
+ - **Figma** – Import components directly from Figma. Use our [Auto plugin]() to export design tokens effortlessly.
9
+ - **Code** – _(coming soon)_ Import tokens and components from an existing codebase.
10
+ - **NPM Package** – _(coming soon)_ Pull in a published design system as a dependency.
11
+
12
+ ## Figma Importer
13
+
14
+ Sync your design system directly from Figma and integrate it into your local project.
15
+
16
+ ### Prerequisites
17
+
18
+ - A **Figma Personal Access Token**
19
+ - A **Professional Figma Plan** (or higher)
20
+
21
+ ### Setup
22
+
23
+ 1. **Generate a personal access token**
24
+ Follow [these instructions](https://help.figma.com/hc/en-us/articles/8085703771159-Manage-personal-access-tokens) from Figma.
25
+
26
+ 2. **Get your design system file ID**
27
+ Open your Figma file and copy the part of the URL after `/design/`.
28
+
29
+ 3. **Configure environment variables**
30
+ - `FIGMA_PERSONAL_TOKEN` – The token from your Figma account
31
+ - `FIGMA_FILE_ID` – The ID of the design file (found in the Figma URL after `/design/`)
32
+
33
+ 4. **Publish your components in Figma**
34
+ Right-click anywhere → **Actions** → Search for “Publish changes to library”.
35
+
36
+ > _(Optional)_ If you're using a public design system, you may need to move the file into one of your own Figma projects first.
37
+
38
+ 5. **Export tokens with the Auto plugin**
39
+ - Install the [Auto plugin]()
40
+ - Run it inside your Figma file
41
+ - Click **"Export Tokens"**
42
+ - Save the exported file inside the `.context` folder of your output directory
43
+
44
+ 6. **Run the importer**
45
+
46
+ ```bash
47
+ pnpm import:design-system
48
+ ```
@@ -0,0 +1,16 @@
1
+ export interface FigmaComponent {
2
+ name: string;
3
+ description: string;
4
+ thumbnail: string;
5
+ }
6
+ export type FilterFunctionType = (components: FigmaComponent[]) => FigmaComponent[];
7
+ export declare class FigmaComponentsBuilder {
8
+ components: FigmaComponent[];
9
+ withFigmaComponents(): Promise<this>;
10
+ withFigmaComponentSets(): Promise<this>;
11
+ withFilteredNamesForShadcn(): void;
12
+ withFilter(filter: FilterFunctionType): void;
13
+ withAllFigmaInstanceNames(): Promise<this>;
14
+ build(): FigmaComponent[];
15
+ }
16
+ //# sourceMappingURL=FigmaComponentsBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FigmaComponentsBuilder.d.ts","sourceRoot":"","sources":["../src/FigmaComponentsBuilder.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,kBAAkB,GAAG,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,CAAC;AAUpF,qBAAa,sBAAsB;IACjC,UAAU,EAAE,cAAc,EAAE,CAAM;IAE5B,mBAAmB;IAuBnB,sBAAsB;IA+B5B,0BAA0B,IAAI,IAAI;IA2BlC,UAAU,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI;IAQtC,yBAAyB;IAsF/B,KAAK;CAGN"}
@@ -0,0 +1,175 @@
1
+ import * as dotenv from 'dotenv';
2
+ import * as Figma from 'figma-api';
3
+ dotenv.config();
4
+ const figmaApi = new Figma.Api({
5
+ personalAccessToken: process.env.FIGMA_PERSONAL_TOKEN,
6
+ });
7
+ export class FigmaComponentsBuilder {
8
+ constructor() {
9
+ this.components = [];
10
+ }
11
+ async withFigmaComponents() {
12
+ try {
13
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
14
+ const response = await figmaApi.getFileComponents({ file_key: process.env.FIGMA_FILE_ID });
15
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
16
+ if (response.meta.components.length > 0) {
17
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
18
+ console.log(JSON.stringify(response.meta.components.length, null, 2));
19
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
20
+ this.components = response.meta.components.map((component) => ({
21
+ name: component.name,
22
+ description: component.description,
23
+ thumbnail: component.thumbnail_url,
24
+ }));
25
+ }
26
+ }
27
+ catch (e) {
28
+ console.error(e);
29
+ }
30
+ return this;
31
+ }
32
+ async withFigmaComponentSets() {
33
+ try {
34
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
35
+ const response = await figmaApi.getFileComponentSets({ file_key: process.env.FIGMA_FILE_ID });
36
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
37
+ if (response.meta.component_sets.length > 0) {
38
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
39
+ this.components = response.meta.component_sets.map((component) => ({
40
+ name: component.name,
41
+ description: component.description ?? 'N/A',
42
+ thumbnail: component.thumbnail_url ?? 'N/A',
43
+ }));
44
+ }
45
+ }
46
+ catch (e) {
47
+ console.error(e);
48
+ }
49
+ return this;
50
+ }
51
+ // extractBracketedComponents(item: FigmaComponent): FigmaComponent | null {
52
+ // const match = item.name.match(/<([^>]+)>/);
53
+ // return match ? { ...item, name: match[1].trim() } : null;
54
+ // }
55
+ //
56
+ // withFilteredNamesForMui() {
57
+ // // eslint-disable-next-line @typescript-eslint/unbound-method
58
+ // this.components = this.components.map(this.extractBracketedComponents).filter(Boolean) as FigmaComponent[];
59
+ // }
60
+ withFilteredNamesForShadcn() {
61
+ this.components = this.components
62
+ .map((comp) => {
63
+ if (!comp?.name)
64
+ return null;
65
+ let str = comp.name.trim();
66
+ if (str.includes('/')) {
67
+ str = str.split('/')[0].trim();
68
+ }
69
+ else {
70
+ str = str.split(' ')[0].trim();
71
+ }
72
+ if (str.length > 0) {
73
+ str = str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();
74
+ }
75
+ else {
76
+ return null;
77
+ }
78
+ return {
79
+ ...comp,
80
+ name: str.toLowerCase(),
81
+ };
82
+ })
83
+ .filter((c) => Boolean(c));
84
+ }
85
+ withFilter(filter) {
86
+ try {
87
+ this.components = filter(this.components);
88
+ }
89
+ catch (e) {
90
+ console.error('Error applying custom filter:', e);
91
+ }
92
+ }
93
+ async withAllFigmaInstanceNames() {
94
+ try {
95
+ /// ----
96
+ const usedComponentMap = new Map();
97
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
98
+ const { document } = await figmaApi.getFile({
99
+ file_key: process.env.FIGMA_FILE_ID,
100
+ depth: 1,
101
+ });
102
+ function walkTree(node) {
103
+ if (node.type === 'INSTANCE' && Boolean(node.name)) {
104
+ if (!usedComponentMap.has(node.name)) {
105
+ usedComponentMap.set(node.name, {
106
+ name: node.name,
107
+ description: node.description ?? '',
108
+ thumbnail: node.thumbnail_url ?? '',
109
+ });
110
+ }
111
+ }
112
+ // eslint-disable-next-line @typescript-eslint/strict-boolean-expressions
113
+ if (node.children) {
114
+ for (const child of node.children) {
115
+ walkTree(child);
116
+ }
117
+ }
118
+ }
119
+ walkTree(document);
120
+ this.components = Array.from(usedComponentMap.values());
121
+ /// ----
122
+ // const components = []
123
+ // // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
124
+ // const { meta } = await figmaApi.getFileComponentSets({ file_key: process.env.FIGMA_FILE_ID });
125
+ // // console.log(response);
126
+ //
127
+ // console.log('Component sets:', meta.component_sets); // ⬅️ Check this!
128
+ //
129
+ // const componentSetIds = meta.component_sets.map(componentSet => componentSet.node_id); // This must return valid Figma node IDs
130
+ //
131
+ // console.log('ComponentSet IDs:', componentSetIds);
132
+ //
133
+ // const fileNodes = await figmaApi.getFileNodes({
134
+ // file_key: process.env.FIGMA_FILE_ID,
135
+ // }, {
136
+ // ids: componentSetIds.join(','),
137
+ // });
138
+ //
139
+ // for (const node of Object.values(fileNodes.nodes)) {
140
+ // const componentSet = node.document;
141
+ //
142
+ // if (componentSet.type === 'COMPONENT_SET' && componentSet.children?.length) {
143
+ // const variants = componentSet.children;
144
+ // const firstVariant = variants[0]; // or apply filtering logic
145
+ //
146
+ // components.push({
147
+ // name: componentSet.name, // e.g. "Button"
148
+ // id: firstVariant.id, // this is the actual variant node
149
+ // variantName: firstVariant.name // e.g. "primary=true, size=md"
150
+ // });
151
+ // }
152
+ // }
153
+ //
154
+ // fs.writeFileSync('output.json', JSON.stringify(components, null, 2));
155
+ // if (Boolean(response)) {
156
+ // // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
157
+ // this.components = response.meta.component_sets.map(
158
+ // (component: { name: string; description: string; thumbnail_url: string }) => ({
159
+ // name: component.name,
160
+ // description: component.description,
161
+ // thumbnail_url: component.thumbnail_url,
162
+ // }),
163
+ // );
164
+ // }
165
+ }
166
+ catch (e) {
167
+ console.error(e);
168
+ }
169
+ return this;
170
+ }
171
+ build() {
172
+ return this.components;
173
+ }
174
+ }
175
+ //# sourceMappingURL=FigmaComponentsBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FigmaComponentsBuilder.js","sourceRoot":"","sources":["../src/FigmaComponentsBuilder.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,10 @@
1
1
  import { type CommandHandler, type Command, type Event } from '@auto-engineer/message-bus';
2
+ import { ImportStrategy } from '../index';
2
3
  export type ImportDesignSystemCommand = Command<'ImportDesignSystem', {
3
4
  inputDir: string;
4
5
  outputDir: string;
6
+ strategy?: keyof typeof ImportStrategy;
7
+ filterPath?: string;
5
8
  }>;
6
9
  export type DesignSystemImportedEvent = Event<'DesignSystemImported', {
7
10
  inputDir: string;
@@ -1 +1 @@
1
- {"version":3,"file":"import-design-system.d.ts","sourceRoot":"","sources":["../../src/commands/import-design-system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAI3F,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAC7C,oBAAoB,EACpB;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CACF,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,KAAK,CAC3C,sBAAsB,EACtB;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CACF,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,KAAK,CAC/C,0BAA0B,EAC1B;IACE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CACF,CAAC;AAGF,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,yBAAyB,GAAG,6BAA6B,CAAC,CAsDpE;AAED,eAAO,MAAM,gCAAgC,EAAE,cAAc,CAAC,yBAAyB,CAUtF,CAAC"}
1
+ {"version":3,"file":"import-design-system.d.ts","sourceRoot":"","sources":["../../src/commands/import-design-system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,4BAA4B,CAAC;AAE3F,OAAO,EAAyC,cAAc,EAA2B,MAAM,UAAU,CAAC;AAG1G,MAAM,MAAM,yBAAyB,GAAG,OAAO,CAC7C,oBAAoB,EACpB;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,OAAO,cAAc,CAAC;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CACF,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,KAAK,CAC3C,sBAAsB,EACtB;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CACF,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,KAAK,CAC/C,0BAA0B,EAC1B;IACE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CACF,CAAC;AAGF,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,yBAAyB,GAAG,6BAA6B,CAAC,CAqEpE;AAED,eAAO,MAAM,gCAAgC,EAAE,cAAc,CAAC,yBAAyB,CAUtF,CAAC"}
@@ -1,8 +1,9 @@
1
1
  import { promises as fs } from 'fs';
2
- import { copyDesignSystemDocsAndUserPreferences } from '../index.js';
2
+ import { importDesignSystemComponentsFromFigma, ImportStrategy } from '../index.js';
3
+ import { FilterLoader } from '../utils/FilterLoader.js';
3
4
  // Handler
4
5
  export async function handleImportDesignSystemCommand(command) {
5
- const { inputDir, outputDir } = command.data;
6
+ const { inputDir, outputDir, strategy, filterPath } = command.data;
6
7
  try {
7
8
  // Check if input directory exists
8
9
  const inputExists = await fs
@@ -23,7 +24,23 @@ export async function handleImportDesignSystemCommand(command) {
23
24
  correlationId: command.correlationId,
24
25
  };
25
26
  }
26
- await copyDesignSystemDocsAndUserPreferences(inputDir, outputDir);
27
+ const resolvedStrategy = strategy ? ImportStrategy[strategy] : ImportStrategy.WITH_COMPONENT_SETS;
28
+ let filterFn;
29
+ let loader;
30
+ if (typeof filterPath === 'string' && filterPath.trim().length > 0) {
31
+ try {
32
+ loader = new FilterLoader();
33
+ filterFn = await loader.loadFilter(filterPath);
34
+ }
35
+ catch (e) {
36
+ console.warn(`Could not import filter from ${filterPath}. Skipping custom filter.`, e);
37
+ }
38
+ finally {
39
+ if (loader)
40
+ loader.cleanup();
41
+ }
42
+ }
43
+ await importDesignSystemComponentsFromFigma(outputDir, resolvedStrategy, filterFn);
27
44
  console.log(`Design system files processed from ${inputDir} to ${outputDir}`);
28
45
  return {
29
46
  type: 'DesignSystemImported',
@@ -1 +1 @@
1
- {"version":3,"file":"import-design-system.js","sourceRoot":"","sources":["../../src/commands/import-design-system.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,sCAAsC,EAAE,MAAM,UAAU,CAAC;AA2BlE,UAAU;AACV,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,OAAkC;IAElC,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAE7C,IAAI,CAAC;QACH,kCAAkC;QAClC,MAAM,WAAW,GAAG,MAAM,EAAE;aACzB,MAAM,CAAC,QAAQ,CAAC;aAChB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC;aAChB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;QAEtB,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,0DAA0D;YAC1D,OAAO;gBACL,IAAI,EAAE,0BAA0B;gBAChC,IAAI,EAAE;oBACJ,KAAK,EAAE,mCAAmC,QAAQ,EAAE;oBACpD,QAAQ;oBACR,SAAS;iBACV;gBACD,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;aACrC,CAAC;QACJ,CAAC;QAED,MAAM,sCAAsC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,sCAAsC,QAAQ,OAAO,SAAS,EAAE,CAAC,CAAC;QAE9E,OAAO;YACL,IAAI,EAAE,sBAAsB;YAC5B,IAAI,EAAE;gBACJ,QAAQ;gBACR,SAAS;aACV;YACD,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5E,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QAEvD,OAAO;YACL,IAAI,EAAE,0BAA0B;YAChC,IAAI,EAAE;gBACJ,KAAK,EAAE,YAAY;gBACnB,QAAQ;gBACR,SAAS;aACV;YACD,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,gCAAgC,GAA8C;IACzF,IAAI,EAAE,oBAAoB;IAC1B,MAAM,EAAE,KAAK,EAAE,OAAkC,EAAiB,EAAE;QAClE,MAAM,MAAM,GAAG,MAAM,+BAA+B,CAAC,OAAO,CAAC,CAAC;QAC9D,IAAI,MAAM,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,WAAW,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"import-design-system.js","sourceRoot":"","sources":["../../src/commands/import-design-system.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,4 +1,17 @@
1
+ import { type FilterFunctionType } from './FigmaComponentsBuilder';
1
2
  export declare function generateDesignSystemMarkdown(inputDir: string, outputDir: string): Promise<void>;
2
3
  export * from './commands/import-design-system';
4
+ export type { FilterFunctionType } from './FigmaComponentsBuilder';
3
5
  export declare function copyDesignSystemDocsAndUserPreferences(inputDir: string, outputDir: string): Promise<void>;
6
+ export declare function generateMarkdownFromComponents(components: {
7
+ name: string;
8
+ description: string;
9
+ thumbnail: string;
10
+ }[]): string;
11
+ export declare enum ImportStrategy {
12
+ WITH_COMPONENTS = "WITH_COMPONENTS",
13
+ WITH_COMPONENT_SETS = "WITH_COMPONENT_SETS",
14
+ WITH_ALL_FIGMA_INSTANCES = "WITH_ALL_FIGMA_INSTANCES"
15
+ }
16
+ export declare function importDesignSystemComponentsFromFigma(outputDir: string, strategy?: ImportStrategy, filterFn?: FilterFunctionType): Promise<void>;
4
17
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA6BA,wBAAsB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBrG;AAED,cAAc,iCAAiC,CAAC;AAiBhD,wBAAsB,sCAAsC,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B/G"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAA0B,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AA+B3F,wBAAsB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBrG;AAED,cAAc,iCAAiC,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAiBnE,wBAAsB,sCAAsC,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B/G;AAwBD,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAAE,GACrE,MAAM,CAYR;AAED,oBAAY,cAAc;IACxB,eAAe,oBAAoB;IACnC,mBAAmB,wBAAwB;IAC3C,wBAAwB,6BAA6B;CACtD;AAED,wBAAsB,qCAAqC,CACzD,SAAS,EAAE,MAAM,EACjB,QAAQ,GAAE,cAAmD,EAC7D,QAAQ,CAAC,EAAE,kBAAkB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAyCf"}
package/dist/index.js CHANGED
@@ -2,8 +2,14 @@ import * as path from 'path';
2
2
  import * as fs from 'fs/promises';
3
3
  import * as dotenv from 'dotenv';
4
4
  import { fileURLToPath } from 'url';
5
+ import * as Figma from 'figma-api';
6
+ import { FigmaComponentsBuilder } from './FigmaComponentsBuilder.js';
7
+ // import { AIProvider, generateTextWithAI } from '@auto-engineer/ai-gateway';
5
8
  dotenv.config();
6
9
  const __filename = fileURLToPath(import.meta.url);
10
+ const api = new Figma.Api({
11
+ personalAccessToken: process.env.FIGMA_PERSONAL_TOKEN,
12
+ });
7
13
  async function getAllTsxFiles(dir) {
8
14
  let results = [];
9
15
  const entries = await fs.readdir(dir, { withFileTypes: true });
@@ -82,6 +88,80 @@ export async function copyDesignSystemDocsAndUserPreferences(inputDir, outputDir
82
88
  }
83
89
  }
84
90
  }
91
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
92
+ async function getFigmaComponents() {
93
+ let components = [];
94
+ try {
95
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
96
+ const response = await api.getFileComponentSets({ file_key: process.env.FIGMA_FILE_ID });
97
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment,@typescript-eslint/no-unsafe-call,@typescript-eslint/no-unsafe-member-access
98
+ components = response.meta.component_sets.map((component) => ({
99
+ name: component.name,
100
+ description: component.description,
101
+ thumbnail: component.thumbnail_url,
102
+ }));
103
+ console.log('figma response: ', response);
104
+ }
105
+ catch (e) {
106
+ console.error(e);
107
+ }
108
+ console.log(components.length);
109
+ return components;
110
+ }
111
+ export function generateMarkdownFromComponents(components) {
112
+ let md = '# Design System\n\n## Components\n\n';
113
+ if (components.length === 0) {
114
+ console.warn('No components found');
115
+ }
116
+ for (const component of components) {
117
+ md += `### ${component.name}\nDescription: ${component.description}\nImage: ![${component.name} image](${component.thumbnail})\n\n`;
118
+ }
119
+ return md;
120
+ }
121
+ export var ImportStrategy;
122
+ (function (ImportStrategy) {
123
+ ImportStrategy["WITH_COMPONENTS"] = "WITH_COMPONENTS";
124
+ ImportStrategy["WITH_COMPONENT_SETS"] = "WITH_COMPONENT_SETS";
125
+ ImportStrategy["WITH_ALL_FIGMA_INSTANCES"] = "WITH_ALL_FIGMA_INSTANCES";
126
+ })(ImportStrategy || (ImportStrategy = {}));
127
+ export async function importDesignSystemComponentsFromFigma(outputDir, strategy = ImportStrategy.WITH_COMPONENT_SETS, filterFn) {
128
+ const figmaComponentsBuilder = new FigmaComponentsBuilder();
129
+ if (strategy === ImportStrategy.WITH_COMPONENTS) {
130
+ await figmaComponentsBuilder.withFigmaComponents();
131
+ }
132
+ else if (strategy === ImportStrategy.WITH_COMPONENT_SETS) {
133
+ await figmaComponentsBuilder.withFigmaComponentSets();
134
+ }
135
+ else if (strategy === ImportStrategy.WITH_ALL_FIGMA_INSTANCES) {
136
+ await figmaComponentsBuilder.withAllFigmaInstanceNames();
137
+ }
138
+ // figmaComponentsBuilder.withFilteredNamesForMui();
139
+ // figmaComponentsBuilder.withFilteredNamesForShadcn();
140
+ if (filterFn) {
141
+ figmaComponentsBuilder.withFilter(filterFn);
142
+ }
143
+ const figmaComponents = figmaComponentsBuilder.build();
144
+ console.log(figmaComponents.length);
145
+ const generatedComponentsMDFile = generateMarkdownFromComponents(figmaComponents);
146
+ // const mdWithImageAnalysis = await generateTextWithAI(
147
+ // `
148
+ // Given this markdown file content:
149
+ // ${generatedComponentsMDFile}
150
+ //
151
+ // ------ INSTRUCTIONS -------
152
+ // !IMPORTANT: Only return with Markdown content, nothing else, I will be putting this straight in a .md file. Don't even start the file with \`\`\`markdown
153
+ // For every component Image: Analyze the given image and add to the given component.
154
+ // - add more content to the "Description:" part of the component.
155
+ // - add "Hierarchy:" part under the component, returning the parts a component is build of. like [Button, Input]
156
+ // `,
157
+ // AIProvider.OpenAI,
158
+ // { temperature: 0.2, maxTokens: 8000 },
159
+ // );
160
+ // await fs.mkdir(outputDir, { recursive: true });
161
+ const outPath = path.join(outputDir, 'design-system.md');
162
+ await fs.writeFile(outPath, generatedComponentsMDFile);
163
+ // await copyFile("../../../examples/design-system/design-system-principles.md", outputDir, 'design-system-principles.md');
164
+ }
85
165
  // Check if this file is being run directly
86
166
  if (process.argv[1] === __filename) {
87
167
  const [, , inputDir, outputDir] = process.argv;
@@ -97,12 +177,20 @@ if (process.argv[1] === __filename) {
97
177
  // console.error('Error generating design-system.md:', err);
98
178
  // process.exit(1);
99
179
  // });
100
- copyDesignSystemDocsAndUserPreferences(inputDir, outputDir)
180
+ // copyDesignSystemDocsAndUserPreferences(inputDir, outputDir)
181
+ // .then(() => {
182
+ // console.log(`design-system.md copied to ${outputDir}`);
183
+ // })
184
+ // .catch((err) => {
185
+ // console.error('Error copying design-system.md:', err);
186
+ // process.exit(1);
187
+ // });
188
+ importDesignSystemComponentsFromFigma(outputDir)
101
189
  .then(() => {
102
- console.log(`design-system.md copied to ${outputDir}`);
190
+ console.log(`design-system.md generated to ${outputDir}`);
103
191
  })
104
192
  .catch((err) => {
105
- console.error('Error copying design-system.md:', err);
193
+ console.error('Error generating design-system.md:', err);
106
194
  process.exit(1);
107
195
  });
108
196
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { FilterFunctionType } from '../FigmaComponentsBuilder';
2
+ export declare class FilterLoader {
3
+ private tsxRegistered;
4
+ private tsxUnregister;
5
+ loadFilter(filePath: string): Promise<FilterFunctionType>;
6
+ private ensureTsxSupport;
7
+ cleanup(): void;
8
+ }
9
+ //# sourceMappingURL=FilterLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterLoader.d.ts","sourceRoot":"","sources":["../../src/utils/FilterLoader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,qBAAa,YAAY;IACvB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAA6B;IAE5C,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAmCjD,gBAAgB;IAqB9B,OAAO,IAAI,IAAI;CAUhB"}
@@ -0,0 +1,66 @@
1
+ import { extname, resolve as resolvePath } from 'path';
2
+ import { pathToFileURL } from 'url';
3
+ import { existsSync } from 'fs';
4
+ export class FilterLoader {
5
+ constructor() {
6
+ this.tsxRegistered = false;
7
+ this.tsxUnregister = null;
8
+ }
9
+ async loadFilter(filePath) {
10
+ if (typeof filePath !== 'string' || filePath.trim().length === 0) {
11
+ throw new Error('Filter file path is required');
12
+ }
13
+ const absolutePath = resolvePath(process.cwd(), filePath);
14
+ if (!existsSync(absolutePath)) {
15
+ throw new Error(`Filter file not found: ${absolutePath}`);
16
+ }
17
+ const ext = extname(absolutePath).toLowerCase();
18
+ // Enable tsx loader for TS files at runtime
19
+ if (ext === '.ts' || ext === '.tsx') {
20
+ await this.ensureTsxSupport();
21
+ }
22
+ const fileUrl = pathToFileURL(absolutePath).href;
23
+ const loadedUnknown = await import(fileUrl);
24
+ const loadedModule = loadedUnknown;
25
+ if (typeof loadedModule.filter === 'function') {
26
+ return loadedModule.filter;
27
+ }
28
+ if (typeof loadedModule.default === 'function') {
29
+ console.warn('Using default export from filter module. Prefer a named export "filter".');
30
+ return loadedModule.default;
31
+ }
32
+ throw new Error('No filter function found. Export a function named "filter" or as a default export from the file.');
33
+ }
34
+ async ensureTsxSupport() {
35
+ if (this.tsxRegistered)
36
+ return;
37
+ try {
38
+ const tsxUnknown = await import('tsx/esm/api');
39
+ const tsxApi = tsxUnknown;
40
+ if (typeof tsxApi.register === 'function') {
41
+ this.tsxUnregister = tsxApi.register();
42
+ this.tsxRegistered = true;
43
+ }
44
+ else {
45
+ throw new Error('tsx/esm/api.register is not a function');
46
+ }
47
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
48
+ }
49
+ catch (error) {
50
+ throw new Error('TypeScript filter detected but tsx is not available.\n' +
51
+ 'Install tsx (npm i -D tsx) or provide a JavaScript file (.js/.mjs).');
52
+ }
53
+ }
54
+ cleanup() {
55
+ if (this.tsxUnregister) {
56
+ try {
57
+ this.tsxUnregister();
58
+ }
59
+ finally {
60
+ this.tsxUnregister = null;
61
+ this.tsxRegistered = false;
62
+ }
63
+ }
64
+ }
65
+ }
66
+ //# sourceMappingURL=FilterLoader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FilterLoader.js","sourceRoot":"","sources":["../../src/utils/FilterLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,MAAM,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAGhC,MAAM,OAAO,YAAY;IAAzB;QACU,kBAAa,GAAG,KAAK,CAAC;QACtB,kBAAa,GAAwB,IAAI,CAAC;IAoEpD,CAAC;IAlEC,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC/B,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,CAAC,CAAC;QAE1D,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,0BAA0B,YAAY,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,MAAM,GAAG,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,WAAW,EAAE,CAAC;QAEhD,4CAA4C;QAC5C,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;YACpC,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAChC,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC;QAEjD,MAAM,aAAa,GAAY,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,aAAwD,CAAC;QAE9E,IAAI,OAAO,YAAY,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC9C,OAAO,YAAY,CAAC,MAA4B,CAAC;QACnD,CAAC;QAED,IAAI,OAAO,YAAY,CAAC,OAAO,KAAK,UAAU,EAAE,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;YACzF,OAAO,YAAY,CAAC,OAA6B,CAAC;QACpD,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,kGAAkG,CAAC,CAAC;IACtH,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO;QAE/B,IAAI,CAAC;YACH,MAAM,UAAU,GAAY,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACxD,MAAM,MAAM,GAAG,UAA4C,CAAC;YAC5D,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;gBAC1C,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;YACD,6DAA6D;QAC/D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CACb,wDAAwD;gBACtD,qEAAqE,CACxE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,IAAI,CAAC,aAAa,EAAE,CAAC;YACvB,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC1B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;CACF"}