unframer 2.24.2 → 2.24.4

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.
Files changed (60) hide show
  1. package/dist/cli.d.ts +1 -0
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +10 -30
  4. package/dist/cli.js.map +1 -1
  5. package/dist/css.d.ts.map +1 -1
  6. package/dist/esbuild.d.ts +1 -1
  7. package/dist/esbuild.d.ts.map +1 -1
  8. package/dist/esbuild.js +17 -13
  9. package/dist/esbuild.js.map +1 -1
  10. package/dist/exporter.d.ts.map +1 -1
  11. package/dist/exporter.js +4 -1
  12. package/dist/exporter.js.map +1 -1
  13. package/dist/framer.d.ts.map +1 -1
  14. package/dist/framer.js +20 -11
  15. package/dist/framer.js.map +1 -1
  16. package/dist/react.d.ts.map +1 -1
  17. package/dist/sentry.d.ts +2 -0
  18. package/dist/sentry.d.ts.map +1 -0
  19. package/dist/sentry.js +23 -0
  20. package/dist/sentry.js.map +1 -0
  21. package/dist/utils.d.ts +16 -1
  22. package/dist/utils.d.ts.map +1 -1
  23. package/dist/utils.js +23 -3
  24. package/dist/utils.js.map +1 -1
  25. package/dist/version.d.ts +1 -1
  26. package/dist/version.js +1 -1
  27. package/esm/cli.d.ts +1 -0
  28. package/esm/cli.d.ts.map +1 -1
  29. package/esm/cli.js +10 -30
  30. package/esm/cli.js.map +1 -1
  31. package/esm/css.d.ts.map +1 -1
  32. package/esm/esbuild.d.ts +1 -1
  33. package/esm/esbuild.d.ts.map +1 -1
  34. package/esm/esbuild.js +13 -6
  35. package/esm/esbuild.js.map +1 -1
  36. package/esm/exporter.d.ts.map +1 -1
  37. package/esm/exporter.js +4 -1
  38. package/esm/exporter.js.map +1 -1
  39. package/esm/framer.d.ts.map +1 -1
  40. package/esm/framer.js +20 -11
  41. package/esm/framer.js.map +1 -1
  42. package/esm/react.d.ts.map +1 -1
  43. package/esm/sentry.d.ts +2 -0
  44. package/esm/sentry.d.ts.map +1 -0
  45. package/esm/sentry.js +20 -0
  46. package/esm/sentry.js.map +1 -0
  47. package/esm/utils.d.ts +16 -1
  48. package/esm/utils.d.ts.map +1 -1
  49. package/esm/utils.js +22 -2
  50. package/esm/utils.js.map +1 -1
  51. package/esm/version.d.ts +1 -1
  52. package/esm/version.js +1 -1
  53. package/package.json +5 -4
  54. package/src/cli.tsx +13 -31
  55. package/src/esbuild.ts +16 -7
  56. package/src/exporter.ts +4 -1
  57. package/src/framer.js +40 -11
  58. package/src/sentry.ts +23 -0
  59. package/src/utils.ts +28 -2
  60. package/src/version.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"AAGA,OAAO,EACH,wBAAwB,EACxB,aAAa,EAMhB,MAAM,OAAO,CAAA;AACd,OAAO,EAEH,sBAAsB,EAEzB,MAAM,UAAU,CAAA;AAYjB,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,sBAAsB,CAAA;AA8BpE;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,UAAwB,EAAE;;CAAA,GAAG,GAAG,CAmD9D;AAED,eAAO,MAAM,qBAAqB,GAC9B,CAAC,SAAS,aAAa,CAAC;IAAE,OAAO,CAAC,EAAE,GAAG,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAChE,mDAIC;IACC,SAAS,EAAE,CAAC,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;CAC/E,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,KAAG,GA6ElD,CAAA;AAsBD,OAAO,KAAK,MAAM,OAAO,CAAA;AAsCzB,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;;;CAAA,OAGtD;AAQD,wBAAgB,WAAW,CAAC,EACxB,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,GAAG,IAAI,EACV;;;;;;;CAAA,8CA4CA;AAED,wBAAgB,gBAAgB,CAAC,EAC7B,MAAM,EAAE,OAAO,EACf,QAAQ,EACR,YAAY,EACZ,MAAM,EAEN,OAAO,GACV;;;;;;CAAA,8CA6BA;AAyBD,KAAK,qBAAqB,GAAG;IACzB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B,CAAA;AAMD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,8CAM5D"}
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"AAGA,OAAO,EACH,wBAAwB,EACxB,aAAa,EAMhB,MAAM,OAAO,CAAA;AACd,OAAO,EAEH,sBAAsB,EAEzB,MAAM,UAAU,CAAA;AAYjB,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,sBAAsB,CAAA;AA8BpE;;GAEG;AACH,wBAAgB,YAAY,CAAC,EAAE,UAAwB,EAAE;;CAAA,GAAG,GAAG,CAmD9D;AAED,eAAO,MAAM,qBAAqB,GAC9B,CAAC,SAAS,aAAa,CAAC;IAAE,OAAO,CAAC,EAAE,GAAG,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,qDAK/D;IACC,SAAS,EAAE,CAAC,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAC,kBAAkB,EAAE,wBAAwB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;CAC/E,GAAG,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,KAAG,GA6ElD,CAAA;AAsBD,OAAO,KAAK,MAAM,OAAO,CAAA;AAsCzB,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE;;;CAAA,OAGtD;AAQD,wBAAgB,WAAW,CAAC,EACxB,IAAI,EACJ,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,GAAG,IAAI,EACV;;;;;;;CAAA,8CA4CA;AAED,wBAAgB,gBAAgB,CAAC,EAC7B,MAAM,EAAE,OAAO,EACf,QAAQ,EACR,YAAY,EACZ,MAAM,EAEN,OAAO,GACV;;;;;;CAAA,8CA6BA;AAyBD,KAAK,qBAAqB,GAAG;IACzB,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC5B,CAAA;AAMD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,8CAM5D"}
@@ -0,0 +1,2 @@
1
+ export declare function notifyError(error: unknown, msg?: string): Promise<void>;
2
+ //# sourceMappingURL=sentry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sentry.d.ts","sourceRoot":"","sources":["../src/sentry.ts"],"names":[],"mappings":"AAKA,wBAAsB,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,MAAM,iBAiB7D"}
package/esm/sentry.js ADDED
@@ -0,0 +1,20 @@
1
+ const SENTRY_DSN = 'https://67125acb9a41f616144a07c90a16775e@o4508014272446464.ingest.de.sentry.io/4509202968674384';
2
+ let sentry = null;
3
+ export async function notifyError(error, msg) {
4
+ console.error(msg, error);
5
+ if (!sentry) {
6
+ const mod = await import('@sentry/node');
7
+ mod.init({
8
+ dsn: SENTRY_DSN,
9
+ beforeSend(event) {
10
+ if (event?.['name'] === 'AbortError')
11
+ return null;
12
+ return event;
13
+ },
14
+ });
15
+ sentry = mod;
16
+ }
17
+ sentry.captureException(error, { extra: { msg } });
18
+ await sentry.flush(1000);
19
+ }
20
+ //# sourceMappingURL=sentry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sentry.js","sourceRoot":"","sources":["../src/sentry.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,GACZ,iGAAiG,CAAA;AAErG,IAAI,MAAM,GAAyC,IAAI,CAAA;AAEvD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAc,EAAE,GAAY;IAC1D,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAEzB,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAA;QACxC,GAAG,CAAC,IAAI,CAAC;YACL,GAAG,EAAE,UAAU;YACf,UAAU,CAAC,KAAK;gBACZ,IAAI,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,YAAY;oBAAE,OAAO,IAAI,CAAA;gBACjD,OAAO,KAAK,CAAA;YAChB,CAAC;SACJ,CAAC,CAAA;QACF,MAAM,GAAG,GAAG,CAAA;IAChB,CAAC;IAED,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAA;IAClD,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC"}
package/esm/utils.d.ts CHANGED
@@ -1,8 +1,23 @@
1
- export declare const spinner: import("nanospinner").Spinner;
1
+ import { Agent } from 'undici';
2
2
  export declare function terminalMarkdown(markdown: string): string | Promise<string>;
3
+ export declare const dispatcher: Agent;
3
4
  export declare const logger: {
4
5
  debug: boolean;
5
6
  log(...args: any[]): void;
7
+ start(x?: string): void;
8
+ stop(x?: string): void;
9
+ info(...args: any[]): void;
10
+ update(...args: any[]): void;
11
+ green(...args: any[]): void;
12
+ error(...args: any[]): void;
13
+ };
14
+ export declare const spinner: {
15
+ debug: boolean;
16
+ log(...args: any[]): void;
17
+ start(x?: string): void;
18
+ stop(x?: string): void;
19
+ info(...args: any[]): void;
20
+ update(...args: any[]): void;
6
21
  green(...args: any[]): void;
7
22
  error(...args: any[]): void;
8
23
  };
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,OAAO,+BAAiD,CAAA;AAIrE,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,4BAEhD;AAKD,eAAO,MAAM,MAAM;;;;;CAclB,CAAA;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,UAQ/C;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,oBAE/B;AAUD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,UAkBpC;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAE5E;AAED,eAAO,MAAM,qBAAqB,oBAAsC,CAAA"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EACH,KAAK,EAKR,MAAM,QAAQ,CAAA;AAQf,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,4BAEhD;AAED,eAAO,MAAM,UAAU,OAGrB,CAAA;AAKF,eAAO,MAAM,MAAM;;;cAQL,MAAM;aAIP,MAAM;;;;;CAgBlB,CAAA;AAED,eAAO,MAAM,OAAO;;;cAtBN,MAAM;aAIP,MAAM;;;;;CAkBU,CAAA;AAE7B,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,UAQ/C;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,oBAE/B;AAUD,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,UAkBpC;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAE5E;AAED,eAAO,MAAM,qBAAqB,oBAAsC,CAAA"}
package/esm/utils.js CHANGED
@@ -1,12 +1,15 @@
1
1
  import pico from 'picocolors';
2
+ import { Agent, } from 'undici';
2
3
  import { marked } from 'marked';
3
4
  import { markedTerminal } from 'marked-terminal';
4
- import { createSpinner } from 'nanospinner';
5
- export const spinner = createSpinner('Downloading Framer Components');
6
5
  marked.use(markedTerminal());
7
6
  export function terminalMarkdown(markdown) {
8
7
  return marked(markdown);
9
8
  }
9
+ export const dispatcher = new Agent({
10
+ keepAliveTimeout: 20,
11
+ keepAliveMaxTimeout: 20,
12
+ });
10
13
  const shouldDebugUnframer = !!process.env.DEBUG_UNFRAMER;
11
14
  const prefix = '[unframer]';
12
15
  export const logger = {
@@ -17,6 +20,22 @@ export const logger = {
17
20
  }
18
21
  console.log(prefix, ...args);
19
22
  },
23
+ start(x) {
24
+ if (!x)
25
+ return;
26
+ console.log(prefix, x);
27
+ },
28
+ stop(x) {
29
+ if (!x)
30
+ return;
31
+ console.log(prefix, x);
32
+ },
33
+ info(...args) {
34
+ console.log(prefix, ...args);
35
+ },
36
+ update(...args) {
37
+ console.log(prefix, ...args);
38
+ },
20
39
  green(...args) {
21
40
  console.log([prefix, ...args].map((x) => pico.green(x)).join(' '));
22
41
  },
@@ -24,6 +43,7 @@ export const logger = {
24
43
  console.error([prefix, ...args].map((x) => pico.red(x)).join(' '));
25
44
  },
26
45
  };
46
+ export const spinner = logger;
27
47
  export function componentNameToPath(name) {
28
48
  return (name
29
49
  .split('/')
package/esm/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
package/esm/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const version = "2.24.2";
1
+ export declare const version = "2.24.4";
2
2
  //# sourceMappingURL=version.d.ts.map
package/esm/version.js CHANGED
@@ -1,2 +1,2 @@
1
- export const version = '2.24.2';
1
+ export const version = '2.24.4';
2
2
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "unframer",
3
- "version": "2.24.2",
3
+ "version": "2.24.4",
4
4
  "description": "Import Framer components directly in your React app, type safe and customizable",
5
5
  "sideEffects": false,
6
6
  "repository": "https://github.com/remorses/unframer",
@@ -42,20 +42,21 @@
42
42
  "node": ">=18.0.0"
43
43
  },
44
44
  "dependencies": {
45
+ "@sentry/node": "^9.13.0",
45
46
  "async-sema": "^3.1.1",
46
47
  "cac": "^6.7.14",
47
- "esbuild": "^0.24.2",
48
+ "esbuild": "^0.25.3",
48
49
  "esbuild-plugins-node-modules-polyfill": "^1.6.8",
49
50
  "find-up": "^7.0.0",
50
51
  "json5": "^2.2.3",
51
52
  "marked": "^15.0.6",
52
53
  "marked-terminal": "^7.2.1",
53
54
  "nanospinner": "^1.2.2",
54
- "node-fetch-commonjs": "^3.3.2",
55
55
  "picocolors": "^1.1.1",
56
56
  "real-framer-motion": "npm:framer-motion@12.0.6",
57
57
  "spiceflow": "^1.6.1",
58
- "string-dedent": "^3.0.1"
58
+ "string-dedent": "^3.0.1",
59
+ "undici": "^7.8.0"
59
60
  },
60
61
  "devDependencies": {
61
62
  "@babel/core": "^7.26.7",
package/src/cli.tsx CHANGED
@@ -1,4 +1,6 @@
1
1
  import { setMaxListeners } from 'events'
2
+ import { fetch } from 'undici'
3
+ import './sentry.js'
2
4
  import JSON from 'json5'
3
5
  import { bundle, StyleToken } from './exporter.js'
4
6
  import { createClient } from './generated/api-client.js'
@@ -10,11 +12,13 @@ import path, { basename } from 'path'
10
12
  import { BreakpointSizes } from './css.js'
11
13
  import {
12
14
  componentNameToPath,
15
+ dispatcher,
13
16
  isTruthy,
14
17
  logger,
15
18
  sleep,
16
19
  spinner,
17
20
  } from './utils.js'
21
+ import { notifyError } from './sentry.js'
18
22
  const configNames = ['unframer.config.json', 'unframer.json']
19
23
 
20
24
  export const cli = cac('unframer')
@@ -55,18 +59,22 @@ cli.command('[projectId]', 'Run unframer with optional project ID')
55
59
  url:
56
60
  process.env.UNFRAMER_SERVER_URL ||
57
61
  'https://unframer.co',
62
+
58
63
  })
59
64
 
65
+ spinner.start(`Fetching config for project ${projectId}`)
60
66
  const { data, error } =
61
67
  await client.api.plugins.reactExportPlugin
62
68
  .project({ projectId })
63
69
  .get()
64
70
  if (error) {
65
- logger.error('Error fetching project data:', error)
71
+ spinner.error('Error fetching project data:')
72
+ console.error(error)
66
73
  throw error
67
74
  }
75
+ spinner.info(`Got Framer project data`)
68
76
  const websiteUrl = data?.project?.websiteUrl
69
- logger.log('unframer data', data)
77
+
70
78
  const projectName = data?.project?.projectName || ''
71
79
  if (projectName) {
72
80
  spinner.info(`Using project: ${projectName}`)
@@ -127,6 +135,7 @@ cli.command('[projectId]', 'Run unframer with optional project ID')
127
135
  while (Date.now() - startTime < 30 * 60 * 1000) {
128
136
  const etag = await fetch(websiteUrl, {
129
137
  method: 'HEAD',
138
+ dispatcher,
130
139
  })
131
140
  .then((response) => response.headers.get('etag'))
132
141
  .catch((error) => {
@@ -179,7 +188,8 @@ cli.command('[projectId]', 'Run unframer with optional project ID')
179
188
  })
180
189
  await buildContext.dispose?.()
181
190
  } catch (error) {
182
- logger.error('Error in main:', error)
191
+ notifyError(error)
192
+
183
193
  throw error
184
194
  }
185
195
  })
@@ -223,34 +233,6 @@ cli.command('init', 'Init the unframer.config.json config').action(
223
233
  },
224
234
  )
225
235
 
226
- function safeJsonParse(json: string) {
227
- try {
228
- return JSON.parse(json)
229
- } catch (e) {
230
- return null
231
- }
232
- }
233
-
234
- function pluck<T, K extends keyof T>(o: T, names: K[]): { [k: string]: T[K] } {
235
- return Object.fromEntries(names.map((n) => [n, o[n]]))
236
- }
237
-
238
- function getNewNames(oldConfig: Config, newConfig: Config) {
239
- // get the new names, also check if the previous url (object value) has changed
240
- const oldKeys = Object.keys(oldConfig.components)
241
- const newKeys = Object.keys(newConfig.components)
242
- const newNames = newKeys.filter((key) => {
243
- if (!oldKeys.includes(key)) {
244
- return true
245
- }
246
- if (oldConfig.components[key] !== newConfig.components[key]) {
247
- return true
248
- }
249
- return false
250
- })
251
- return newNames
252
- }
253
-
254
236
  export type Config = {
255
237
  components: {
256
238
  [name: string]: string
package/src/esbuild.ts CHANGED
@@ -1,6 +1,5 @@
1
- import { createSpinner } from 'nanospinner'
2
- import fetch from 'node-fetch-commonjs'
3
- import { logger } from './utils'
1
+ import { fetch } from 'undici'
2
+ import { dispatcher, logger, spinner } from './utils'
4
3
 
5
4
  import { Plugin, transform, type OnResolveArgs } from 'esbuild'
6
5
  import { resolvePackage } from './exporter'
@@ -47,7 +46,7 @@ export function esbuildPluginBundleDependencies({
47
46
  externalPackages = [...defaultExternalPackages, ...externalPackages]
48
47
  // console.log(externalPackages)
49
48
  const codeCache = new Map()
50
- const spinner = createSpinner('Fetching Framer Components Modules')
49
+
51
50
  spinner.start()
52
51
 
53
52
  const plugin: Plugin = {
@@ -173,7 +172,10 @@ export function esbuildPluginBundleDependencies({
173
172
  logger.log('fetching', url, 'because of', args.path)
174
173
  spinner.update(`Fetching ${url.replace(/https?:\/\//, '')}`)
175
174
 
176
- const res = await fetchWithRetry(resolved, { signal })
175
+ const res = await fetchWithRetry(resolved, {
176
+ signal,
177
+ dispatcher,
178
+ })
177
179
  if (!res.ok) {
178
180
  throw new Error(
179
181
  `Cannot fetch ${resolved}: ${res.status} ${res.statusText}`,
@@ -274,6 +276,7 @@ export async function recursiveResolveRedirect(
274
276
  let res = await fetchWithRetry(url, {
275
277
  redirect: 'manual',
276
278
  method: 'HEAD',
279
+ dispatcher,
277
280
  signal: signal,
278
281
  })
279
282
  const loc = res.headers.get('location')
@@ -284,8 +287,14 @@ export async function recursiveResolveRedirect(
284
287
 
285
288
  return url
286
289
  }
287
-
288
- export const fetchWithRetry = retryTwice(fetch) as typeof fetch
290
+ export const fetchWithRetry = retryTwice(
291
+ (url: string, options?: RequestInit) => {
292
+ const timeout = setTimeout(() => {
293
+ logger.error('fetch taking more than 5s', url)
294
+ }, 5000)
295
+ return fetch(url, options as any).finally(() => clearTimeout(timeout))
296
+ },
297
+ ) as typeof fetch
289
298
 
290
299
  export function retryTwice<F extends Function>(fn: Function): Function {
291
300
  return async (...args) => {
package/src/exporter.ts CHANGED
@@ -39,6 +39,8 @@ import {
39
39
  spinner,
40
40
  terminalMarkdown,
41
41
  } from './utils.js'
42
+ import { error } from 'console'
43
+ import { notifyError } from './sentry'
42
44
 
43
45
  export type StyleToken = {
44
46
  id: string
@@ -569,7 +571,7 @@ export async function bundle({
569
571
  const prop = findExampleProperty(exampleComponent?.propertyControls)
570
572
  const propStr = prop ? ` ${prop}='example'` : ''
571
573
  const responsiveComponent = dedent`
572
- {/* use .Responsive for components with breakpoints, remove it if you want to pass a specific variant */}
574
+ {/* use .Responsive for components with breakpoints */}
573
575
  <${exampleComponent?.componentName}.Responsive${propStr} />
574
576
  `
575
577
  const nonResponsiveComponent = dedent`
@@ -811,6 +813,7 @@ async function extractPropControlsSafe(text, name) {
811
813
  }
812
814
  return propControls
813
815
  } catch (e: any) {
816
+ notifyError(error, 'typescript generation error')
814
817
  logger.error(`Cannot get property controls for ${name}`, e.stack)
815
818
  }
816
819
  }
package/src/framer.js CHANGED
@@ -10429,7 +10429,7 @@ function steps(numSteps, direction = 'end',) {
10429
10429
  };
10430
10430
  }
10431
10431
 
10432
- // /:https://app.framerstatic.com/framer.RHPWPDUD.mjs
10432
+ // /:https://app.framerstatic.com/framer.J6CEE64J.mjs
10433
10433
  import React4 from 'react';
10434
10434
  import { startTransition as startTransition2, } from 'react';
10435
10435
  import { Suspense as Suspense2, } from 'react';
@@ -18571,6 +18571,7 @@ var ControlType = /* @__PURE__ */ ((ControlType2) => {
18571
18571
  ControlType2['Cursor'] = 'cursor';
18572
18572
  ControlType2['Padding'] = 'padding';
18573
18573
  ControlType2['BorderRadius'] = 'borderradius';
18574
+ ControlType2['Gap'] = 'gap';
18574
18575
  ControlType2['CollectionReference'] = 'collectionreference';
18575
18576
  ControlType2['MultiCollectionReference'] = 'multicollectionreference';
18576
18577
  ControlType2['TrackingId'] = 'trackingid';
@@ -19008,6 +19009,9 @@ var inputIconCSSDeclaration = {
19008
19009
  function createRGBVariableFallbacks(variables, fallback,) {
19009
19010
  return css.variable(...variables.flatMap((variable) => [`${variable}-rgb`, variable,]), fallback,);
19010
19011
  }
19012
+ function createFontSizeVariableFallbacks(variables, fallback,) {
19013
+ return css.variable(...variables.flatMap((variable) => [`${variable}-canvas`, variable,]), fallback,);
19014
+ }
19011
19015
  var richTextCSSRules = /* @__PURE__ */ (() => [
19012
19016
  /* css */
19013
19017
  `
@@ -19043,7 +19047,9 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
19043
19047
  font-style: var(--framer-blockquote-font-style, var(--framer-font-style, normal));
19044
19048
  font-weight: var(--framer-blockquote-font-weight, var(--framer-font-weight, 400));
19045
19049
  color: var(--framer-blockquote-text-color, var(--framer-text-color, #000));
19046
- font-size: calc(var(--framer-blockquote-font-size, var(--framer-font-size, 16px)) * var(--framer-font-size-scale, 1));
19050
+ font-size: calc(var(--framer-blockquote-font-size, ${
19051
+ createFontSizeVariableFallbacks(['--framer-font-size',], '16px',)
19052
+ }) * var(--framer-font-size-scale, 1));
19047
19053
  letter-spacing: var(--framer-blockquote-letter-spacing, var(--framer-letter-spacing, 0));
19048
19054
  text-transform: var(--framer-blockquote-text-transform, var(--framer-text-transform, none));
19049
19055
  text-decoration: var(--framer-blockquote-text-decoration, var(--framer-text-decoration, none));
@@ -19162,7 +19168,9 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
19162
19168
  font-style: var(--framer-blockquote-font-style, var(--framer-code-font-style, var(--framer-font-style, normal)));
19163
19169
  font-weight: var(--framer-blockquote-font-weight, var(--framer-code-font-weight, var(--framer-font-weight, 400)));
19164
19170
  color: var(--framer-blockquote-text-color, var(--framer-code-text-color, var(--framer-text-color, #000)));
19165
- font-size: calc(var(--framer-blockquote-font-size, var(--framer-font-size, 16px)) * var(--framer-font-size-scale, 1));
19171
+ font-size: calc(var(--framer-blockquote-font-size, ${
19172
+ createFontSizeVariableFallbacks(['--framer-font-size',], '16px',)
19173
+ }) * var(--framer-font-size-scale, 1));
19166
19174
  letter-spacing: var(--framer-blockquote-letter-spacing, var(--framer-letter-spacing, 0));
19167
19175
  line-height: var(--framer-blockquote-line-height, var(--framer-line-height, 1.2em));
19168
19176
  }
@@ -19195,7 +19203,9 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
19195
19203
  font-style: var(--framer-blockquote-font-style, var(--framer-link-font-style, var(--framer-font-style, normal)));
19196
19204
  font-weight: var(--framer-blockquote-font-weight, var(--framer-link-font-weight, var(--framer-font-weight, 400)));
19197
19205
  color: var(--framer-blockquote-text-color, var(--framer-link-text-color, var(--framer-text-color, #000)));
19198
- font-size: calc(var(--framer-blockquote-font-size, var(--framer-font-size, 16px)) * var(--framer-font-size-scale, 1));
19206
+ font-size: calc(var(--framer-blockquote-font-size, ${
19207
+ createFontSizeVariableFallbacks(['--framer-font-size',], '16px',)
19208
+ }) * var(--framer-font-size-scale, 1));
19199
19209
  text-transform: var(--framer-blockquote-text-transform, var(--framer-link-text-transform, var(--framer-text-transform, none)));
19200
19210
  text-decoration: var(--framer-blockquote-text-decoration, var(--framer-link-text-decoration, var(--framer-text-decoration, none)));
19201
19211
  /* Cursor inherit to overwrite the user agent stylesheet on rich text links. */
@@ -19223,7 +19233,9 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
19223
19233
  font-style: var(--framer-blockquote-font-style, var(--framer-code-font-style, var(--framer-font-style, normal)));
19224
19234
  font-weight: var(--framer-blockquote-font-weight, var(--framer-code-font-weight, var(--framer-font-weight, 400)));
19225
19235
  color: var(--framer-blockquote-text-color, var(--framer-link-text-color, var(--framer-code-text-color, var(--framer-text-color, #000))));
19226
- font-size: calc(var(--framer-blockquote-font-size, var(--framer-font-size, 16px)) * var(--framer-font-size-scale, 1));
19236
+ font-size: calc(var(--framer-blockquote-font-size, ${
19237
+ createFontSizeVariableFallbacks(['--framer-font-size',], '16px',)
19238
+ }) * var(--framer-font-size-scale, 1));
19227
19239
  }
19228
19240
  `, /* css */
19229
19241
  `
@@ -19252,7 +19264,9 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
19252
19264
  font-style: var(--framer-link-hover-font-style, var(--framer-blockquote-font-style, var(--framer-link-font-style, var(--framer-font-style, normal))));
19253
19265
  font-weight: var(--framer-link-hover-font-weight, var(--framer-blockquote-font-weight, var(--framer-link-font-weight, var(--framer-font-weight, 400))));
19254
19266
  color: var(--framer-link-hover-text-color, var(--framer-blockquote-text-color, var(--framer-link-text-color, var(--framer-text-color, #000))));
19255
- font-size: calc(var(--framer-link-hover-font-size, var(--framer-blockquote-font-size, var(--framer-font-size, 16px))) * var(--framer-font-size-scale, 1));
19267
+ font-size: calc(var(--framer-link-hover-font-size, var(--framer-blockquote-font-size, ${
19268
+ createFontSizeVariableFallbacks(['--framer-font-size',], '16px',)
19269
+ })) * var(--framer-font-size-scale, 1));
19256
19270
  text-transform: var(--framer-link-hover-text-transform, var(--framer-blockquote-text-transform, var(--framer-link-text-transform, var(--framer-text-transform, none))));
19257
19271
  text-decoration: var(--framer-link-hover-text-decoration, var(--framer-blockquote-text-decoration, var(--framer-link-text-decoration, var(--framer-text-decoration, none))));
19258
19272
  }
@@ -19283,7 +19297,9 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
19283
19297
  font-style: var(--framer-blockquote-font-style, var(--framer-code-font-style, var(--framer-font-style, normal)));
19284
19298
  font-weight: var(--framer-blockquote-font-weight, var(--framer-code-font-weight, var(--framer-font-weight, 400)));
19285
19299
  color: var(--framer-link-hover-text-color, var(--framer-blockquote-text-color, var(--framer-link-text-color, var(--framer-code-text-color, var(--framer-text-color, #000)))));
19286
- font-size: calc(var(--framer-link-hover-font-size, var(--framer-blockquote-font-size, var(--framer-link-font-size, var(--framer-font-size, 16px)))) * var(--framer-font-size-scale, 1));
19300
+ font-size: calc(var(--framer-link-hover-font-size, var(--framer-blockquote-font-size, var(--framer-link-font-size, ${
19301
+ createFontSizeVariableFallbacks(['--framer-font-size',], '16px',)
19302
+ }))) * var(--framer-font-size-scale, 1));
19287
19303
  }
19288
19304
  `, /* css */
19289
19305
  `
@@ -19312,7 +19328,9 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
19312
19328
  font-style: var(--framer-link-current-font-style, var(--framer-link-font-style, var(--framer-font-style, normal)));
19313
19329
  font-weight: var(--framer-link-current-font-weight, var(--framer-link-font-weight, var(--framer-font-weight, 400)));
19314
19330
  color: var(--framer-link-current-text-color, var(--framer-link-text-color, var(--framer-text-color, #000)));
19315
- font-size: calc(var(--framer-link-current-font-size, var(--framer-link-font-size, var(--framer-font-size, 16px))) * var(--framer-font-size-scale, 1));
19331
+ font-size: calc(var(--framer-link-current-font-size, var(--framer-link-font-size, ${
19332
+ createFontSizeVariableFallbacks(['--framer-font-size',], '16px',)
19333
+ })) * var(--framer-font-size-scale, 1));
19316
19334
  text-transform: var(--framer-link-current-text-transform, var(--framer-link-text-transform, var(--framer-text-transform, none)));
19317
19335
  text-decoration: var(--framer-link-current-text-decoration, var(--framer-link-text-decoration, var(--framer-text-decoration, none)));
19318
19336
  }
@@ -19338,7 +19356,9 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
19338
19356
  font-style: var(--framer-code-font-style, var(--framer-font-style, normal));
19339
19357
  font-weight: var(--framer-code-font-weight, var(--framer-font-weight, 400));
19340
19358
  color: var(--framer-link-current-text-color, var(--framer-link-text-color, var(--framer-code-text-color, var(--framer-text-color, #000))));
19341
- font-size: calc(var(--framer-link-current-font-size, var(--framer-link-font-size, var(--framer-font-size, 16px))) * var(--framer-font-size-scale, 1));
19359
+ font-size: calc(var(--framer-link-current-font-size, var(--framer-link-font-size, ${
19360
+ createFontSizeVariableFallbacks(['--framer-font-size',], '16px',)
19361
+ })) * var(--framer-font-size-scale, 1));
19342
19362
  }
19343
19363
  `, /* css */
19344
19364
  `
@@ -19367,7 +19387,9 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
19367
19387
  font-style: var(--framer-link-hover-font-style, var(--framer-link-current-font-style, var(--framer-link-font-style, var(--framer-font-style, normal))));
19368
19388
  font-weight: var(--framer-link-hover-font-weight, var(--framer-link-current-font-weight, var(--framer-link-font-weight, var(--framer-font-weight, 400))));
19369
19389
  color: var(--framer-link-hover-text-color, var(--framer-link-current-text-color, var(--framer-link-text-color, var(--framer-text-color, #000))));
19370
- font-size: calc(var(--framer-link-hover-font-size, var(--framer-link-current-font-size, var(--framer-link-font-size, var(--framer-font-size, 16px)))) * var(--framer-font-size-scale, 1));
19390
+ font-size: calc(var(--framer-link-hover-font-size, var(--framer-link-current-font-size, var(--framer-link-font-size, ${
19391
+ createFontSizeVariableFallbacks(['--framer-font-size',], '16px',)
19392
+ }))) * var(--framer-font-size-scale, 1));
19371
19393
  text-transform: var(--framer-link-hover-text-transform, var(--framer-link-current-text-transform, var(--framer-link-text-transform, var(--framer-text-transform, none))));
19372
19394
  text-decoration: var(--framer-link-hover-text-decoration, var(--framer-link-current-text-decoration, var(--framer-link-text-decoration, var(--framer-text-decoration, none))));
19373
19395
  }
@@ -19399,7 +19421,9 @@ var richTextCSSRules = /* @__PURE__ */ (() => [
19399
19421
  font-style: var(--framer-code-font-style, var(--framer-font-style, normal));
19400
19422
  font-weight: var(--framer-code-font-weight, var(--framer-font-weight, 400));
19401
19423
  color: var(--framer-link-hover-text-color, var(--framer-link-current-text-color, var(--framer-link-text-color, var(--framer-code-text-color, var(--framer-text-color, #000)))));
19402
- font-size: calc(var(--framer-link-hover-font-size, var(--framer-link-current-font-size, var(--framer-link-font-size, var(--framer-font-size, 16px)))) * var(--framer-font-size-scale, 1));
19424
+ font-size: calc(var(--framer-link-hover-font-size, var(--framer-link-current-font-size, var(--framer-link-font-size, ${
19425
+ createFontSizeVariableFallbacks(['--framer-font-size',], '16px',)
19426
+ }))) * var(--framer-font-size-scale, 1));
19403
19427
  }
19404
19428
  `, /* css */
19405
19429
  `
@@ -19932,6 +19956,7 @@ function getControlDefaultValue(control,) {
19932
19956
  case 'boxshadow':
19933
19957
  case 'padding':
19934
19958
  case 'borderradius':
19959
+ case 'gap':
19935
19960
  return isString(control.defaultValue,) ? control.defaultValue : void 0;
19936
19961
  case 'boolean':
19937
19962
  return isBoolean(control.defaultValue,) ? control.defaultValue : void 0;
@@ -42474,6 +42499,10 @@ var variantsNameToWeight = {
42474
42499
  'solid-regular': 700,
42475
42500
  'solid-medium': 800,
42476
42501
  'solid-bold': 900,
42502
+ // The following variants are only used in the Tecnica font.
42503
+ // We assign them different (fake) weights to ensure that the changes are picked up when switching between variants.
42504
+ '53': 400,
42505
+ '55': 600,
42477
42506
  // we want to put variable fonts last
42478
42507
  variable: 1e3,
42479
42508
  'variable-italic': 1e3,
package/src/sentry.ts ADDED
@@ -0,0 +1,23 @@
1
+ const SENTRY_DSN =
2
+ 'https://67125acb9a41f616144a07c90a16775e@o4508014272446464.ingest.de.sentry.io/4509202968674384'
3
+
4
+ let sentry: typeof import('@sentry/node') | null = null
5
+
6
+ export async function notifyError(error: unknown, msg?: string) {
7
+ console.error(msg, error)
8
+
9
+ if (!sentry) {
10
+ const mod = await import('@sentry/node')
11
+ mod.init({
12
+ dsn: SENTRY_DSN,
13
+ beforeSend(event) {
14
+ if (event?.['name'] === 'AbortError') return null
15
+ return event
16
+ },
17
+ })
18
+ sentry = mod
19
+ }
20
+
21
+ sentry.captureException(error, { extra: { msg } })
22
+ await sentry.flush(1000)
23
+ }
package/src/utils.ts CHANGED
@@ -1,17 +1,27 @@
1
1
  import pico from 'picocolors'
2
+ import {
3
+ Agent,
4
+ fetch,
5
+ getGlobalDispatcher,
6
+ interceptors,
7
+ setGlobalDispatcher,
8
+ } from 'undici'
2
9
 
3
10
  import { marked } from 'marked'
4
11
  import { markedTerminal } from 'marked-terminal'
5
12
  import { createSpinner } from 'nanospinner'
6
13
 
7
- export const spinner = createSpinner('Downloading Framer Components')
8
-
9
14
  marked.use(markedTerminal())
10
15
 
11
16
  export function terminalMarkdown(markdown: string) {
12
17
  return marked(markdown)
13
18
  }
14
19
 
20
+ export const dispatcher = new Agent({
21
+ keepAliveTimeout: 20,
22
+ keepAliveMaxTimeout: 20,
23
+ })
24
+
15
25
  const shouldDebugUnframer = !!process.env.DEBUG_UNFRAMER
16
26
 
17
27
  const prefix = '[unframer]'
@@ -23,6 +33,20 @@ export const logger = {
23
33
  }
24
34
  console.log(prefix, ...args)
25
35
  },
36
+ start(x?: string) {
37
+ if (!x) return
38
+ console.log(prefix, x)
39
+ },
40
+ stop(x?: string) {
41
+ if (!x) return
42
+ console.log(prefix, x)
43
+ },
44
+ info(...args) {
45
+ console.log(prefix, ...args)
46
+ },
47
+ update(...args) {
48
+ console.log(prefix, ...args)
49
+ },
26
50
  green(...args) {
27
51
  console.log([prefix, ...args].map((x) => pico.green(x)).join(' '))
28
52
  },
@@ -31,6 +55,8 @@ export const logger = {
31
55
  },
32
56
  }
33
57
 
58
+ export const spinner = logger
59
+
34
60
  export function componentNameToPath(name: string) {
35
61
  return (
36
62
  name
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '2.24.2'
1
+ export const version = '2.24.4'