@nlabs/lex 1.49.4 → 1.50.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.
Files changed (55) hide show
  1. package/.swcrc +35 -0
  2. package/README.md +43 -59
  3. package/__mocks__/chalk.js +19 -17
  4. package/config.json +32 -8
  5. package/examples/lex.config.js +110 -10
  6. package/index.cjs +1 -5
  7. package/lex.config.js +34 -7
  8. package/lib/Button.stories.js +99 -0
  9. package/lib/LexConfig.d.ts +60 -22
  10. package/lib/LexConfig.js +285 -244
  11. package/lib/commands/ai/ai.js +287 -288
  12. package/lib/commands/ai/index.js +8 -7
  13. package/lib/commands/build/build.d.ts +2 -2
  14. package/lib/commands/build/build.js +349 -458
  15. package/lib/commands/clean/clean.js +45 -33
  16. package/lib/commands/compile/compile.js +214 -227
  17. package/lib/commands/config/config.js +46 -42
  18. package/lib/commands/copy/copy.js +36 -35
  19. package/lib/commands/create/create.js +200 -121
  20. package/lib/commands/dev/dev.d.ts +2 -0
  21. package/lib/commands/dev/dev.js +259 -263
  22. package/lib/commands/init/init.js +108 -88
  23. package/lib/commands/link/link.js +18 -14
  24. package/lib/commands/lint/lint.js +735 -742
  25. package/lib/commands/migrate/migrate.js +49 -36
  26. package/lib/commands/publish/publish.js +116 -96
  27. package/lib/commands/serverless/serverless.js +611 -585
  28. package/lib/commands/storybook/storybook.js +242 -238
  29. package/lib/commands/test/test.d.ts +1 -1
  30. package/lib/commands/test/test.js +382 -394
  31. package/lib/commands/update/update.js +141 -120
  32. package/lib/commands/upgrade/upgrade.js +51 -44
  33. package/lib/commands/versions/versions.d.ts +1 -1
  34. package/lib/commands/versions/versions.js +36 -38
  35. package/lib/create/changelog.js +136 -125
  36. package/lib/index.js +40 -38
  37. package/lib/lex.js +95 -68
  38. package/lib/storybook/index.js +6 -1
  39. package/lib/test-react/index.js +7 -84
  40. package/lib/types.d.ts +1 -1
  41. package/lib/types.js +7 -1
  42. package/lib/utils/aiService.js +240 -227
  43. package/lib/utils/app.js +274 -273
  44. package/lib/utils/deepMerge.js +37 -23
  45. package/lib/utils/file.js +218 -215
  46. package/lib/utils/log.js +29 -27
  47. package/lib/utils/reactShim.js +7 -85
  48. package/lib/utils/translations.js +91 -65
  49. package/package.json +63 -64
  50. package/templates/typescript/DataLayer.js.txt +218 -0
  51. package/templates/typescript/DataLayer.test.js.txt +268 -0
  52. package/templates/typescript/DataLayer.test.ts.txt +269 -0
  53. package/templates/typescript/DataLayer.ts.txt +227 -0
  54. package/webpack.config.js +53 -26
  55. package/lib/commands/lint/autofix.d.ts +0 -2
package/lib/utils/log.js CHANGED
@@ -1,29 +1,31 @@
1
- import chalk from "chalk";
2
- const log = (message, type = "info", quiet = false) => {
3
- if (!quiet) {
4
- let color;
5
- switch (type) {
6
- case "error":
7
- color = chalk.red;
8
- break;
9
- case "note":
10
- color = chalk.grey;
11
- break;
12
- case "success":
13
- color = chalk.greenBright;
14
- break;
15
- case "warn":
16
- case "warning":
17
- color = chalk.yellow;
18
- break;
19
- default:
20
- color = chalk.cyan;
21
- break;
1
+ /**
2
+ * Copyright (c) 2022-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */ import chalk from 'chalk';
5
+ export const log = (message, type = 'info', quiet = false)=>{
6
+ if (!quiet) {
7
+ let color;
8
+ switch(type){
9
+ case 'error':
10
+ color = chalk.red;
11
+ break;
12
+ case 'note':
13
+ color = chalk.grey;
14
+ break;
15
+ case 'success':
16
+ color = chalk.greenBright;
17
+ break;
18
+ case 'warn':
19
+ case 'warning':
20
+ color = chalk.yellow;
21
+ break;
22
+ default:
23
+ color = chalk.cyan;
24
+ break;
25
+ }
26
+ // eslint-disable-next-line no-console
27
+ console.log(color(message));
22
28
  }
23
- console.log(color(message));
24
- }
25
29
  };
26
- export {
27
- log
28
- };
29
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL2xvZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjItUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmV4cG9ydCBjb25zdCBsb2cgPSAobWVzc2FnZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcgPSAnaW5mbycsIHF1aWV0ID0gZmFsc2UpID0+IHtcbiAgaWYoIXF1aWV0KSB7XG4gICAgbGV0IGNvbG9yO1xuXG4gICAgc3dpdGNoKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgY29sb3IgPSBjaGFsay5yZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbm90ZSc6XG4gICAgICAgIGNvbG9yID0gY2hhbGsuZ3JleTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgY29sb3IgPSBjaGFsay5ncmVlbkJyaWdodDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd3YXJuJzpcbiAgICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgICBjb2xvciA9IGNoYWxrLnllbGxvdztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb2xvciA9IGNoYWxrLmN5YW47XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coY29sb3IobWVzc2FnZSkpO1xuICB9XG59OyJdLAogICJtYXBwaW5ncyI6ICJBQUlBLE9BQU8sV0FBVztBQUVYLE1BQU0sTUFBTSxDQUFDLFNBQWlCLE9BQWUsUUFBUSxRQUFRLFVBQVU7QUFDNUUsTUFBRyxDQUFDLE9BQU87QUFDVCxRQUFJO0FBRUosWUFBTyxNQUFNO0FBQUEsTUFDWCxLQUFLO0FBQ0gsZ0JBQVEsTUFBTTtBQUNkO0FBQUEsTUFDRixLQUFLO0FBQ0gsZ0JBQVEsTUFBTTtBQUNkO0FBQUEsTUFDRixLQUFLO0FBQ0gsZ0JBQVEsTUFBTTtBQUNkO0FBQUEsTUFDRixLQUFLO0FBQUEsTUFDTCxLQUFLO0FBQ0gsZ0JBQVEsTUFBTTtBQUNkO0FBQUEsTUFDRjtBQUNFLGdCQUFRLE1BQU07QUFDZDtBQUFBLElBQ0o7QUFHQSxZQUFRLElBQUksTUFBTSxPQUFPLENBQUM7QUFBQSxFQUM1QjtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
30
+
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9sb2cudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjItUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmV4cG9ydCBjb25zdCBsb2cgPSAobWVzc2FnZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcgPSAnaW5mbycsIHF1aWV0ID0gZmFsc2UpID0+IHtcbiAgaWYoIXF1aWV0KSB7XG4gICAgbGV0IGNvbG9yO1xuXG4gICAgc3dpdGNoKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgICAgY29sb3IgPSBjaGFsay5yZWQ7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbm90ZSc6XG4gICAgICAgIGNvbG9yID0gY2hhbGsuZ3JleTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdzdWNjZXNzJzpcbiAgICAgICAgY29sb3IgPSBjaGFsay5ncmVlbkJyaWdodDtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd3YXJuJzpcbiAgICAgIGNhc2UgJ3dhcm5pbmcnOlxuICAgICAgICBjb2xvciA9IGNoYWxrLnllbGxvdztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBjb2xvciA9IGNoYWxrLmN5YW47XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coY29sb3IobWVzc2FnZSkpO1xuICB9XG59OyJdLCJuYW1lcyI6WyJjaGFsayIsImxvZyIsIm1lc3NhZ2UiLCJ0eXBlIiwicXVpZXQiLCJjb2xvciIsInJlZCIsImdyZXkiLCJncmVlbkJyaWdodCIsInllbGxvdyIsImN5YW4iLCJjb25zb2xlIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxPQUFPQSxXQUFXLFFBQVE7QUFFMUIsT0FBTyxNQUFNQyxNQUFNLENBQUNDLFNBQWlCQyxPQUFlLE1BQU0sRUFBRUMsUUFBUSxLQUFLO0lBQ3ZFLElBQUcsQ0FBQ0EsT0FBTztRQUNULElBQUlDO1FBRUosT0FBT0Y7WUFDTCxLQUFLO2dCQUNIRSxRQUFRTCxNQUFNTSxHQUFHO2dCQUNqQjtZQUNGLEtBQUs7Z0JBQ0hELFFBQVFMLE1BQU1PLElBQUk7Z0JBQ2xCO1lBQ0YsS0FBSztnQkFDSEYsUUFBUUwsTUFBTVEsV0FBVztnQkFDekI7WUFDRixLQUFLO1lBQ0wsS0FBSztnQkFDSEgsUUFBUUwsTUFBTVMsTUFBTTtnQkFDcEI7WUFDRjtnQkFDRUosUUFBUUwsTUFBTVUsSUFBSTtnQkFDbEI7UUFDSjtRQUVBLHNDQUFzQztRQUN0Q0MsUUFBUVYsR0FBRyxDQUFDSSxNQUFNSDtJQUNwQjtBQUNGLEVBQUUifQ==
@@ -1,85 +1,7 @@
1
- import {
2
- render,
3
- screen,
4
- fireEvent,
5
- waitFor,
6
- waitForElementToBeRemoved,
7
- within,
8
- getByRole,
9
- getByLabelText,
10
- getByPlaceholderText,
11
- getByText,
12
- getByTestId,
13
- getAllByRole,
14
- getAllByLabelText,
15
- getAllByPlaceholderText,
16
- getAllByText,
17
- getAllByTestId,
18
- queryByRole,
19
- queryByLabelText,
20
- queryByPlaceholderText,
21
- queryByText,
22
- queryByTestId,
23
- queryAllByRole,
24
- queryAllByLabelText,
25
- queryAllByPlaceholderText,
26
- queryAllByText,
27
- queryAllByTestId,
28
- findByRole,
29
- findByLabelText,
30
- findByPlaceholderText,
31
- findByText,
32
- findByTestId,
33
- findAllByRole,
34
- findAllByLabelText,
35
- findAllByPlaceholderText,
36
- findAllByText,
37
- findAllByTestId,
38
- renderHook,
39
- act,
40
- cleanup
41
- } from "@testing-library/react";
42
- import * as react from "react";
43
- export {
44
- act,
45
- cleanup,
46
- findAllByLabelText,
47
- findAllByPlaceholderText,
48
- findAllByRole,
49
- findAllByTestId,
50
- findAllByText,
51
- findByLabelText,
52
- findByPlaceholderText,
53
- findByRole,
54
- findByTestId,
55
- findByText,
56
- fireEvent,
57
- getAllByLabelText,
58
- getAllByPlaceholderText,
59
- getAllByRole,
60
- getAllByTestId,
61
- getAllByText,
62
- getByLabelText,
63
- getByPlaceholderText,
64
- getByRole,
65
- getByTestId,
66
- getByText,
67
- queryAllByLabelText,
68
- queryAllByPlaceholderText,
69
- queryAllByRole,
70
- queryAllByTestId,
71
- queryAllByText,
72
- queryByLabelText,
73
- queryByPlaceholderText,
74
- queryByRole,
75
- queryByTestId,
76
- queryByText,
77
- react,
78
- render,
79
- renderHook,
80
- screen,
81
- waitFor,
82
- waitForElementToBeRemoved,
83
- within
84
- };
85
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL3JlYWN0U2hpbS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHtcbiAgcmVuZGVyLFxuICBzY3JlZW4sXG4gIGZpcmVFdmVudCxcbiAgd2FpdEZvcixcbiAgd2FpdEZvckVsZW1lbnRUb0JlUmVtb3ZlZCxcbiAgd2l0aGluLFxuICBnZXRCeVJvbGUsXG4gIGdldEJ5TGFiZWxUZXh0LFxuICBnZXRCeVBsYWNlaG9sZGVyVGV4dCxcbiAgZ2V0QnlUZXh0LFxuICBnZXRCeVRlc3RJZCxcbiAgZ2V0QWxsQnlSb2xlLFxuICBnZXRBbGxCeUxhYmVsVGV4dCxcbiAgZ2V0QWxsQnlQbGFjZWhvbGRlclRleHQsXG4gIGdldEFsbEJ5VGV4dCxcbiAgZ2V0QWxsQnlUZXN0SWQsXG4gIHF1ZXJ5QnlSb2xlLFxuICBxdWVyeUJ5TGFiZWxUZXh0LFxuICBxdWVyeUJ5UGxhY2Vob2xkZXJUZXh0LFxuICBxdWVyeUJ5VGV4dCxcbiAgcXVlcnlCeVRlc3RJZCxcbiAgcXVlcnlBbGxCeVJvbGUsXG4gIHF1ZXJ5QWxsQnlMYWJlbFRleHQsXG4gIHF1ZXJ5QWxsQnlQbGFjZWhvbGRlclRleHQsXG4gIHF1ZXJ5QWxsQnlUZXh0LFxuICBxdWVyeUFsbEJ5VGVzdElkLFxuICBmaW5kQnlSb2xlLFxuICBmaW5kQnlMYWJlbFRleHQsXG4gIGZpbmRCeVBsYWNlaG9sZGVyVGV4dCxcbiAgZmluZEJ5VGV4dCxcbiAgZmluZEJ5VGVzdElkLFxuICBmaW5kQWxsQnlSb2xlLFxuICBmaW5kQWxsQnlMYWJlbFRleHQsXG4gIGZpbmRBbGxCeVBsYWNlaG9sZGVyVGV4dCxcbiAgZmluZEFsbEJ5VGV4dCxcbiAgZmluZEFsbEJ5VGVzdElkLFxuICByZW5kZXJIb29rLFxuICBhY3QsXG4gIGNsZWFudXBcbn0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgKiBhcyByZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCB7cmVhY3R9O1xuXG4vLyBFeHBvcnQgc3BlY2lmaWMgdGVzdGluZyBsaWJyYXJ5IGZ1bmN0aW9uc1xuZXhwb3J0IHtcbiAgcmVuZGVyLFxuICBzY3JlZW4sXG4gIGZpcmVFdmVudCxcbiAgd2FpdEZvcixcbiAgd2FpdEZvckVsZW1lbnRUb0JlUmVtb3ZlZCxcbiAgd2l0aGluLFxuICBnZXRCeVJvbGUsXG4gIGdldEJ5TGFiZWxUZXh0LFxuICBnZXRCeVBsYWNlaG9sZGVyVGV4dCxcbiAgZ2V0QnlUZXh0LFxuICBnZXRCeVRlc3RJZCxcbiAgZ2V0QWxsQnlSb2xlLFxuICBnZXRBbGxCeUxhYmVsVGV4dCxcbiAgZ2V0QWxsQnlQbGFjZWhvbGRlclRleHQsXG4gIGdldEFsbEJ5VGV4dCxcbiAgZ2V0QWxsQnlUZXN0SWQsXG4gIHF1ZXJ5QnlSb2xlLFxuICBxdWVyeUJ5TGFiZWxUZXh0LFxuICBxdWVyeUJ5UGxhY2Vob2xkZXJUZXh0LFxuICBxdWVyeUJ5VGV4dCxcbiAgcXVlcnlCeVRlc3RJZCxcbiAgcXVlcnlBbGxCeVJvbGUsXG4gIHF1ZXJ5QWxsQnlMYWJlbFRleHQsXG4gIHF1ZXJ5QWxsQnlQbGFjZWhvbGRlclRleHQsXG4gIHF1ZXJ5QWxsQnlUZXh0LFxuICBxdWVyeUFsbEJ5VGVzdElkLFxuICBmaW5kQnlSb2xlLFxuICBmaW5kQnlMYWJlbFRleHQsXG4gIGZpbmRCeVBsYWNlaG9sZGVyVGV4dCxcbiAgZmluZEJ5VGV4dCxcbiAgZmluZEJ5VGVzdElkLFxuICBmaW5kQWxsQnlSb2xlLFxuICBmaW5kQWxsQnlMYWJlbFRleHQsXG4gIGZpbmRBbGxCeVBsYWNlaG9sZGVyVGV4dCxcbiAgZmluZEFsbEJ5VGV4dCxcbiAgZmluZEFsbEJ5VGVzdElkLFxuICByZW5kZXJIb29rLFxuICBhY3QsXG4gIGNsZWFudXBcbn07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsWUFBWSxXQUFXOyIsCiAgIm5hbWVzIjogW10KfQo=
1
+ import { render, screen, fireEvent, waitFor, waitForElementToBeRemoved, within, getByRole, getByLabelText, getByPlaceholderText, getByText, getByTestId, getAllByRole, getAllByLabelText, getAllByPlaceholderText, getAllByText, getAllByTestId, queryByRole, queryByLabelText, queryByPlaceholderText, queryByText, queryByTestId, queryAllByRole, queryAllByLabelText, queryAllByPlaceholderText, queryAllByText, queryAllByTestId, findByRole, findByLabelText, findByPlaceholderText, findByText, findByTestId, findAllByRole, findAllByLabelText, findAllByPlaceholderText, findAllByText, findAllByTestId, renderHook, act, cleanup } from '@testing-library/react';
2
+ import * as react from 'react';
3
+ export { react };
4
+ // Export specific testing library functions
5
+ export { render, screen, fireEvent, waitFor, waitForElementToBeRemoved, within, getByRole, getByLabelText, getByPlaceholderText, getByText, getByTestId, getAllByRole, getAllByLabelText, getAllByPlaceholderText, getAllByText, getAllByTestId, queryByRole, queryByLabelText, queryByPlaceholderText, queryByText, queryByTestId, queryAllByRole, queryAllByLabelText, queryAllByPlaceholderText, queryAllByText, queryAllByTestId, findByRole, findByLabelText, findByPlaceholderText, findByText, findByTestId, findAllByRole, findAllByLabelText, findAllByPlaceholderText, findAllByText, findAllByTestId, renderHook, act, cleanup };
6
+
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9yZWFjdFNoaW0udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgcmVuZGVyLFxuICBzY3JlZW4sXG4gIGZpcmVFdmVudCxcbiAgd2FpdEZvcixcbiAgd2FpdEZvckVsZW1lbnRUb0JlUmVtb3ZlZCxcbiAgd2l0aGluLFxuICBnZXRCeVJvbGUsXG4gIGdldEJ5TGFiZWxUZXh0LFxuICBnZXRCeVBsYWNlaG9sZGVyVGV4dCxcbiAgZ2V0QnlUZXh0LFxuICBnZXRCeVRlc3RJZCxcbiAgZ2V0QWxsQnlSb2xlLFxuICBnZXRBbGxCeUxhYmVsVGV4dCxcbiAgZ2V0QWxsQnlQbGFjZWhvbGRlclRleHQsXG4gIGdldEFsbEJ5VGV4dCxcbiAgZ2V0QWxsQnlUZXN0SWQsXG4gIHF1ZXJ5QnlSb2xlLFxuICBxdWVyeUJ5TGFiZWxUZXh0LFxuICBxdWVyeUJ5UGxhY2Vob2xkZXJUZXh0LFxuICBxdWVyeUJ5VGV4dCxcbiAgcXVlcnlCeVRlc3RJZCxcbiAgcXVlcnlBbGxCeVJvbGUsXG4gIHF1ZXJ5QWxsQnlMYWJlbFRleHQsXG4gIHF1ZXJ5QWxsQnlQbGFjZWhvbGRlclRleHQsXG4gIHF1ZXJ5QWxsQnlUZXh0LFxuICBxdWVyeUFsbEJ5VGVzdElkLFxuICBmaW5kQnlSb2xlLFxuICBmaW5kQnlMYWJlbFRleHQsXG4gIGZpbmRCeVBsYWNlaG9sZGVyVGV4dCxcbiAgZmluZEJ5VGV4dCxcbiAgZmluZEJ5VGVzdElkLFxuICBmaW5kQWxsQnlSb2xlLFxuICBmaW5kQWxsQnlMYWJlbFRleHQsXG4gIGZpbmRBbGxCeVBsYWNlaG9sZGVyVGV4dCxcbiAgZmluZEFsbEJ5VGV4dCxcbiAgZmluZEFsbEJ5VGVzdElkLFxuICByZW5kZXJIb29rLFxuICBhY3QsXG4gIGNsZWFudXBcbn0gZnJvbSAnQHRlc3RpbmctbGlicmFyeS9yZWFjdCc7XG5pbXBvcnQgKiBhcyByZWFjdCBmcm9tICdyZWFjdCc7XG5cbmV4cG9ydCB7cmVhY3R9O1xuXG4vLyBFeHBvcnQgc3BlY2lmaWMgdGVzdGluZyBsaWJyYXJ5IGZ1bmN0aW9uc1xuZXhwb3J0IHtcbiAgcmVuZGVyLFxuICBzY3JlZW4sXG4gIGZpcmVFdmVudCxcbiAgd2FpdEZvcixcbiAgd2FpdEZvckVsZW1lbnRUb0JlUmVtb3ZlZCxcbiAgd2l0aGluLFxuICBnZXRCeVJvbGUsXG4gIGdldEJ5TGFiZWxUZXh0LFxuICBnZXRCeVBsYWNlaG9sZGVyVGV4dCxcbiAgZ2V0QnlUZXh0LFxuICBnZXRCeVRlc3RJZCxcbiAgZ2V0QWxsQnlSb2xlLFxuICBnZXRBbGxCeUxhYmVsVGV4dCxcbiAgZ2V0QWxsQnlQbGFjZWhvbGRlclRleHQsXG4gIGdldEFsbEJ5VGV4dCxcbiAgZ2V0QWxsQnlUZXN0SWQsXG4gIHF1ZXJ5QnlSb2xlLFxuICBxdWVyeUJ5TGFiZWxUZXh0LFxuICBxdWVyeUJ5UGxhY2Vob2xkZXJUZXh0LFxuICBxdWVyeUJ5VGV4dCxcbiAgcXVlcnlCeVRlc3RJZCxcbiAgcXVlcnlBbGxCeVJvbGUsXG4gIHF1ZXJ5QWxsQnlMYWJlbFRleHQsXG4gIHF1ZXJ5QWxsQnlQbGFjZWhvbGRlclRleHQsXG4gIHF1ZXJ5QWxsQnlUZXh0LFxuICBxdWVyeUFsbEJ5VGVzdElkLFxuICBmaW5kQnlSb2xlLFxuICBmaW5kQnlMYWJlbFRleHQsXG4gIGZpbmRCeVBsYWNlaG9sZGVyVGV4dCxcbiAgZmluZEJ5VGV4dCxcbiAgZmluZEJ5VGVzdElkLFxuICBmaW5kQWxsQnlSb2xlLFxuICBmaW5kQWxsQnlMYWJlbFRleHQsXG4gIGZpbmRBbGxCeVBsYWNlaG9sZGVyVGV4dCxcbiAgZmluZEFsbEJ5VGV4dCxcbiAgZmluZEFsbEJ5VGVzdElkLFxuICByZW5kZXJIb29rLFxuICBhY3QsXG4gIGNsZWFudXBcbn07Il0sIm5hbWVzIjpbInJlbmRlciIsInNjcmVlbiIsImZpcmVFdmVudCIsIndhaXRGb3IiLCJ3YWl0Rm9yRWxlbWVudFRvQmVSZW1vdmVkIiwid2l0aGluIiwiZ2V0QnlSb2xlIiwiZ2V0QnlMYWJlbFRleHQiLCJnZXRCeVBsYWNlaG9sZGVyVGV4dCIsImdldEJ5VGV4dCIsImdldEJ5VGVzdElkIiwiZ2V0QWxsQnlSb2xlIiwiZ2V0QWxsQnlMYWJlbFRleHQiLCJnZXRBbGxCeVBsYWNlaG9sZGVyVGV4dCIsImdldEFsbEJ5VGV4dCIsImdldEFsbEJ5VGVzdElkIiwicXVlcnlCeVJvbGUiLCJxdWVyeUJ5TGFiZWxUZXh0IiwicXVlcnlCeVBsYWNlaG9sZGVyVGV4dCIsInF1ZXJ5QnlUZXh0IiwicXVlcnlCeVRlc3RJZCIsInF1ZXJ5QWxsQnlSb2xlIiwicXVlcnlBbGxCeUxhYmVsVGV4dCIsInF1ZXJ5QWxsQnlQbGFjZWhvbGRlclRleHQiLCJxdWVyeUFsbEJ5VGV4dCIsInF1ZXJ5QWxsQnlUZXN0SWQiLCJmaW5kQnlSb2xlIiwiZmluZEJ5TGFiZWxUZXh0IiwiZmluZEJ5UGxhY2Vob2xkZXJUZXh0IiwiZmluZEJ5VGV4dCIsImZpbmRCeVRlc3RJZCIsImZpbmRBbGxCeVJvbGUiLCJmaW5kQWxsQnlMYWJlbFRleHQiLCJmaW5kQWxsQnlQbGFjZWhvbGRlclRleHQiLCJmaW5kQWxsQnlUZXh0IiwiZmluZEFsbEJ5VGVzdElkIiwicmVuZGVySG9vayIsImFjdCIsImNsZWFudXAiLCJyZWFjdCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FDRUEsTUFBTSxFQUNOQyxNQUFNLEVBQ05DLFNBQVMsRUFDVEMsT0FBTyxFQUNQQyx5QkFBeUIsRUFDekJDLE1BQU0sRUFDTkMsU0FBUyxFQUNUQyxjQUFjLEVBQ2RDLG9CQUFvQixFQUNwQkMsU0FBUyxFQUNUQyxXQUFXLEVBQ1hDLFlBQVksRUFDWkMsaUJBQWlCLEVBQ2pCQyx1QkFBdUIsRUFDdkJDLFlBQVksRUFDWkMsY0FBYyxFQUNkQyxXQUFXLEVBQ1hDLGdCQUFnQixFQUNoQkMsc0JBQXNCLEVBQ3RCQyxXQUFXLEVBQ1hDLGFBQWEsRUFDYkMsY0FBYyxFQUNkQyxtQkFBbUIsRUFDbkJDLHlCQUF5QixFQUN6QkMsY0FBYyxFQUNkQyxnQkFBZ0IsRUFDaEJDLFVBQVUsRUFDVkMsZUFBZSxFQUNmQyxxQkFBcUIsRUFDckJDLFVBQVUsRUFDVkMsWUFBWSxFQUNaQyxhQUFhLEVBQ2JDLGtCQUFrQixFQUNsQkMsd0JBQXdCLEVBQ3hCQyxhQUFhLEVBQ2JDLGVBQWUsRUFDZkMsVUFBVSxFQUNWQyxHQUFHLEVBQ0hDLE9BQU8sUUFDRix5QkFBeUI7QUFDaEMsWUFBWUMsV0FBVyxRQUFRO0FBRS9CLFNBQVFBLEtBQUssR0FBRTtBQUVmLDRDQUE0QztBQUM1QyxTQUNFdkMsTUFBTSxFQUNOQyxNQUFNLEVBQ05DLFNBQVMsRUFDVEMsT0FBTyxFQUNQQyx5QkFBeUIsRUFDekJDLE1BQU0sRUFDTkMsU0FBUyxFQUNUQyxjQUFjLEVBQ2RDLG9CQUFvQixFQUNwQkMsU0FBUyxFQUNUQyxXQUFXLEVBQ1hDLFlBQVksRUFDWkMsaUJBQWlCLEVBQ2pCQyx1QkFBdUIsRUFDdkJDLFlBQVksRUFDWkMsY0FBYyxFQUNkQyxXQUFXLEVBQ1hDLGdCQUFnQixFQUNoQkMsc0JBQXNCLEVBQ3RCQyxXQUFXLEVBQ1hDLGFBQWEsRUFDYkMsY0FBYyxFQUNkQyxtQkFBbUIsRUFDbkJDLHlCQUF5QixFQUN6QkMsY0FBYyxFQUNkQyxnQkFBZ0IsRUFDaEJDLFVBQVUsRUFDVkMsZUFBZSxFQUNmQyxxQkFBcUIsRUFDckJDLFVBQVUsRUFDVkMsWUFBWSxFQUNaQyxhQUFhLEVBQ2JDLGtCQUFrQixFQUNsQkMsd0JBQXdCLEVBQ3hCQyxhQUFhLEVBQ2JDLGVBQWUsRUFDZkMsVUFBVSxFQUNWQyxHQUFHLEVBQ0hDLE9BQU8sR0FDUCJ9
@@ -1,74 +1,100 @@
1
- import { existsSync, readFileSync, writeFileSync } from "fs";
2
- import { sync as globSync } from "glob";
3
- import { resolve as pathResolve } from "path";
4
- import { log } from "./log.js";
5
- const flattenTranslations = (obj, prefix = "") => {
6
- let flattened = {};
7
- for (const key in obj) {
8
- const value = obj[key];
9
- const newKey = prefix ? `${prefix}.${key}` : key;
10
- if (typeof value === "object" && value !== null && !Array.isArray(value)) {
11
- flattened = { ...flattened, ...flattenTranslations(value, newKey) };
12
- } else {
13
- flattened[newKey] = String(value);
1
+ /**
2
+ * Copyright (c) 2025-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
5
+ import { sync as globSync } from 'glob';
6
+ import { resolve as pathResolve } from 'path';
7
+ import { log } from './log.js';
8
+ const flattenTranslations = (obj, prefix = '')=>{
9
+ let flattened = {};
10
+ for(const key in obj){
11
+ const value = obj[key];
12
+ const newKey = prefix ? `${prefix}.${key}` : key;
13
+ if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
14
+ flattened = {
15
+ ...flattened,
16
+ ...flattenTranslations(value, newKey)
17
+ };
18
+ } else {
19
+ flattened[newKey] = String(value);
20
+ }
14
21
  }
15
- }
16
- return flattened;
22
+ return flattened;
17
23
  };
18
- const findTranslationFiles = (sourcePath) => {
19
- const patterns = [
20
- "**/translations/*.json",
21
- "**/i18n/*.json",
22
- "**/locales/*.json",
23
- "**/lang/*.json"
24
- ];
25
- const files = [];
26
- patterns.forEach((pattern) => {
24
+ const findTranslationFiles = (sourcePath)=>{
25
+ const patterns = [
26
+ '**/translations/*.json',
27
+ '**/i18n/*.json',
28
+ '**/locales/*.json',
29
+ '**/lang/*.json'
30
+ ];
31
+ const files = [];
32
+ patterns.forEach((pattern)=>{
33
+ try {
34
+ const matches = globSync(pattern, {
35
+ absolute: true,
36
+ cwd: sourcePath,
37
+ nodir: true
38
+ });
39
+ files.push(...matches);
40
+ } catch {}
41
+ });
42
+ return files;
43
+ };
44
+ export const processTranslations = async (sourcePath, outputPath, quiet = false)=>{
45
+ if (!existsSync(sourcePath)) {
46
+ log(`Source path does not exist: ${sourcePath}`, 'error', quiet);
47
+ return;
48
+ }
49
+ log('Finding translation files...', 'info', quiet);
50
+ const translationFiles = findTranslationFiles(sourcePath);
51
+ if (translationFiles.length === 0) {
52
+ log('No translation files found', 'warn', quiet);
53
+ return;
54
+ }
55
+ log(`Found ${translationFiles.length} translation files`, 'info', quiet);
56
+ let allTranslations = {};
57
+ for (const filePath of translationFiles){
58
+ try {
59
+ const content = readFileSync(filePath, 'utf8');
60
+ const data = JSON.parse(content);
61
+ allTranslations = {
62
+ ...allTranslations,
63
+ ...data
64
+ };
65
+ log(`Processed: ${filePath}`, 'info', quiet);
66
+ } catch (error) {
67
+ log(`Error processing ${filePath}: ${error.message}`, 'error', quiet);
68
+ }
69
+ }
70
+ const flattenedTranslations = flattenTranslations(allTranslations);
71
+ const outputFile = pathResolve(outputPath, 'translations.json');
27
72
  try {
28
- const matches = globSync(pattern, {
29
- absolute: true,
30
- cwd: sourcePath,
31
- nodir: true
32
- });
33
- files.push(...matches);
73
+ const outputDir = pathResolve(outputPath);
74
+ if (!existsSync(outputDir)) {
75
+ mkdirSync(outputDir, {
76
+ recursive: true
77
+ });
78
+ }
79
+ writeFileSync(outputFile, JSON.stringify(flattenedTranslations, null, 2), 'utf8');
80
+ log(`Translations written to: ${outputFile}`, 'info', quiet);
34
81
  } catch (error) {
82
+ log(`Error writing translations file: ${error.message}`, 'error', quiet);
35
83
  }
36
- });
37
- return files;
38
- };
39
- const processTranslations = async (sourcePath, outputPath, quiet = false) => {
40
- if (!existsSync(sourcePath)) {
41
- log(`Source path does not exist: ${sourcePath}`, "error", quiet);
42
- return;
43
- }
44
- log("Finding translation files...", "info", quiet);
45
- const translationFiles = findTranslationFiles(sourcePath);
46
- if (translationFiles.length === 0) {
47
- log("No translation files found", "warn", quiet);
48
- return;
49
- }
50
- log(`Found ${translationFiles.length} translation files`, "info", quiet);
51
- let allTranslations = {};
52
- for (const filePath of translationFiles) {
84
+ const srcDir = pathResolve(sourcePath, 'src');
85
+ const srcOutputFile = existsSync(srcDir) ? pathResolve(srcDir, 'translations.json') : pathResolve(sourcePath, 'translations.json');
53
86
  try {
54
- const content = readFileSync(filePath, "utf8");
55
- const data = JSON.parse(content);
56
- allTranslations = { ...allTranslations, ...data };
57
- log(`Processed: ${filePath}`, "info", quiet);
87
+ const ensureDir = existsSync(srcDir) ? srcDir : sourcePath;
88
+ if (!existsSync(ensureDir)) {
89
+ mkdirSync(ensureDir, {
90
+ recursive: true
91
+ });
92
+ }
93
+ writeFileSync(srcOutputFile, JSON.stringify(flattenedTranslations, null, 2), 'utf8');
94
+ log(`Translations written to: ${srcOutputFile}`, 'info', quiet);
58
95
  } catch (error) {
59
- log(`Error processing ${filePath}: ${error.message}`, "error", quiet);
96
+ log(`Error writing translations file to src: ${error.message}`, 'error', quiet);
60
97
  }
61
- }
62
- const flattenedTranslations = flattenTranslations(allTranslations);
63
- const outputFile = pathResolve(outputPath, "translations.json");
64
- try {
65
- writeFileSync(outputFile, JSON.stringify(flattenedTranslations, null, 2), "utf8");
66
- log(`Translations written to: ${outputFile}`, "info", quiet);
67
- } catch (error) {
68
- log(`Error writing translations file: ${error.message}`, "error", quiet);
69
- }
70
- };
71
- export {
72
- processTranslations
73
98
  };
74
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL3V0aWxzL3RyYW5zbGF0aW9ucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjUtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhpc3RzU3luYywgcmVhZEZpbGVTeW5jLCB3cml0ZUZpbGVTeW5jfSBmcm9tICdmcyc7XG5pbXBvcnQge3N5bmMgYXMgZ2xvYlN5bmN9IGZyb20gJ2dsb2InO1xuaW1wb3J0IHtyZXNvbHZlIGFzIHBhdGhSZXNvbHZlfSBmcm9tICdwYXRoJztcblxuaW1wb3J0IHtsb2d9IGZyb20gJy4vbG9nLmpzJztcblxuY29uc3QgZmxhdHRlblRyYW5zbGF0aW9ucyA9IChvYmo6IGFueSwgcHJlZml4ID0gJycpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0+IHtcbiAgbGV0IGZsYXR0ZW5lZDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuXG4gIGZvcihjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgY29uc3QgdmFsdWUgPSBvYmpba2V5XTtcbiAgICBjb25zdCBuZXdLZXkgPSBwcmVmaXggPyBgJHtwcmVmaXh9LiR7a2V5fWAgOiBrZXk7XG5cbiAgICBpZih0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZmxhdHRlbmVkID0gey4uLmZsYXR0ZW5lZCwgLi4uZmxhdHRlblRyYW5zbGF0aW9ucyh2YWx1ZSwgbmV3S2V5KX07XG4gICAgfSBlbHNlIHtcbiAgICAgIGZsYXR0ZW5lZFtuZXdLZXldID0gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmxhdHRlbmVkO1xufTtcblxuY29uc3QgZmluZFRyYW5zbGF0aW9uRmlsZXMgPSAoc291cmNlUGF0aDogc3RyaW5nKTogc3RyaW5nW10gPT4ge1xuICBjb25zdCBwYXR0ZXJucyA9IFtcbiAgICAnKiovdHJhbnNsYXRpb25zLyouanNvbicsXG4gICAgJyoqL2kxOG4vKi5qc29uJyxcbiAgICAnKiovbG9jYWxlcy8qLmpzb24nLFxuICAgICcqKi9sYW5nLyouanNvbidcbiAgXTtcblxuICBjb25zdCBmaWxlczogc3RyaW5nW10gPSBbXTtcblxuICBwYXR0ZXJucy5mb3JFYWNoKChwYXR0ZXJuKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBnbG9iU3luYyhwYXR0ZXJuLCB7XG4gICAgICAgIGFic29sdXRlOiB0cnVlLFxuICAgICAgICBjd2Q6IHNvdXJjZVBhdGgsXG4gICAgICAgIG5vZGlyOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIGZpbGVzLnB1c2goLi4ubWF0Y2hlcyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIFBhdHRlcm4gbm90IGZvdW5kLCBjb250aW51ZVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGZpbGVzO1xufTtcblxuZXhwb3J0IGNvbnN0IHByb2Nlc3NUcmFuc2xhdGlvbnMgPSBhc3luYyAoXG4gIHNvdXJjZVBhdGg6IHN0cmluZyxcbiAgb3V0cHV0UGF0aDogc3RyaW5nLFxuICBxdWlldDogYm9vbGVhbiA9IGZhbHNlXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYoIWV4aXN0c1N5bmMoc291cmNlUGF0aCkpIHtcbiAgICBsb2coYFNvdXJjZSBwYXRoIGRvZXMgbm90IGV4aXN0OiAke3NvdXJjZVBhdGh9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZygnRmluZGluZyB0cmFuc2xhdGlvbiBmaWxlcy4uLicsICdpbmZvJywgcXVpZXQpO1xuXG4gIGNvbnN0IHRyYW5zbGF0aW9uRmlsZXMgPSBmaW5kVHJhbnNsYXRpb25GaWxlcyhzb3VyY2VQYXRoKTtcblxuICBpZih0cmFuc2xhdGlvbkZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZygnTm8gdHJhbnNsYXRpb24gZmlsZXMgZm91bmQnLCAnd2FybicsIHF1aWV0KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2coYEZvdW5kICR7dHJhbnNsYXRpb25GaWxlcy5sZW5ndGh9IHRyYW5zbGF0aW9uIGZpbGVzYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgbGV0IGFsbFRyYW5zbGF0aW9uczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIGZvcihjb25zdCBmaWxlUGF0aCBvZiB0cmFuc2xhdGlvbkZpbGVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGY4Jyk7XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShjb250ZW50KTtcblxuICAgICAgYWxsVHJhbnNsYXRpb25zID0gey4uLmFsbFRyYW5zbGF0aW9ucywgLi4uZGF0YX07XG5cbiAgICAgIGxvZyhgUHJvY2Vzc2VkOiAke2ZpbGVQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2coYEVycm9yIHByb2Nlc3NpbmcgJHtmaWxlUGF0aH06ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZmxhdHRlbmVkVHJhbnNsYXRpb25zID0gZmxhdHRlblRyYW5zbGF0aW9ucyhhbGxUcmFuc2xhdGlvbnMpO1xuICBjb25zdCBvdXRwdXRGaWxlID0gcGF0aFJlc29sdmUob3V0cHV0UGF0aCwgJ3RyYW5zbGF0aW9ucy5qc29uJyk7XG5cbiAgdHJ5IHtcbiAgICB3cml0ZUZpbGVTeW5jKG91dHB1dEZpbGUsIEpTT04uc3RyaW5naWZ5KGZsYXR0ZW5lZFRyYW5zbGF0aW9ucywgbnVsbCwgMiksICd1dGY4Jyk7XG4gICAgbG9nKGBUcmFuc2xhdGlvbnMgd3JpdHRlbiB0bzogJHtvdXRwdXRGaWxlfWAsICdpbmZvJywgcXVpZXQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZyhgRXJyb3Igd3JpdGluZyB0cmFuc2xhdGlvbnMgZmlsZTogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgfVxufTsiXSwKICAibWFwcGluZ3MiOiAiQUFJQSxTQUFRLFlBQVksY0FBYyxxQkFBb0I7QUFDdEQsU0FBUSxRQUFRLGdCQUFlO0FBQy9CLFNBQVEsV0FBVyxtQkFBa0I7QUFFckMsU0FBUSxXQUFVO0FBRWxCLE1BQU0sc0JBQXNCLENBQUMsS0FBVSxTQUFTLE9BQStCO0FBQzdFLE1BQUksWUFBb0MsQ0FBQztBQUV6QyxhQUFVLE9BQU8sS0FBSztBQUNwQixVQUFNLFFBQVEsSUFBSSxHQUFHO0FBQ3JCLFVBQU0sU0FBUyxTQUFTLEdBQUcsTUFBTSxJQUFJLEdBQUcsS0FBSztBQUU3QyxRQUFHLE9BQU8sVUFBVSxZQUFZLFVBQVUsUUFBUSxDQUFDLE1BQU0sUUFBUSxLQUFLLEdBQUc7QUFDdkUsa0JBQVksRUFBQyxHQUFHLFdBQVcsR0FBRyxvQkFBb0IsT0FBTyxNQUFNLEVBQUM7QUFBQSxJQUNsRSxPQUFPO0FBQ0wsZ0JBQVUsTUFBTSxJQUFJLE9BQU8sS0FBSztBQUFBLElBQ2xDO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQUVBLE1BQU0sdUJBQXVCLENBQUMsZUFBaUM7QUFDN0QsUUFBTSxXQUFXO0FBQUEsSUFDZjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFFQSxRQUFNLFFBQWtCLENBQUM7QUFFekIsV0FBUyxRQUFRLENBQUMsWUFBWTtBQUM1QixRQUFJO0FBQ0YsWUFBTSxVQUFVLFNBQVMsU0FBUztBQUFBLFFBQ2hDLFVBQVU7QUFBQSxRQUNWLEtBQUs7QUFBQSxRQUNMLE9BQU87QUFBQSxNQUNULENBQUM7QUFDRCxZQUFNLEtBQUssR0FBRyxPQUFPO0FBQUEsSUFDdkIsU0FBUyxPQUFPO0FBQUEsSUFFaEI7QUFBQSxFQUNGLENBQUM7QUFFRCxTQUFPO0FBQ1Q7QUFFTyxNQUFNLHNCQUFzQixPQUNqQyxZQUNBLFlBQ0EsUUFBaUIsVUFDQztBQUNsQixNQUFHLENBQUMsV0FBVyxVQUFVLEdBQUc7QUFDMUIsUUFBSSwrQkFBK0IsVUFBVSxJQUFJLFNBQVMsS0FBSztBQUMvRDtBQUFBLEVBQ0Y7QUFFQSxNQUFJLGdDQUFnQyxRQUFRLEtBQUs7QUFFakQsUUFBTSxtQkFBbUIscUJBQXFCLFVBQVU7QUFFeEQsTUFBRyxpQkFBaUIsV0FBVyxHQUFHO0FBQ2hDLFFBQUksOEJBQThCLFFBQVEsS0FBSztBQUMvQztBQUFBLEVBQ0Y7QUFFQSxNQUFJLFNBQVMsaUJBQWlCLE1BQU0sc0JBQXNCLFFBQVEsS0FBSztBQUV2RSxNQUFJLGtCQUF1QyxDQUFDO0FBRTVDLGFBQVUsWUFBWSxrQkFBa0I7QUFDdEMsUUFBSTtBQUNGLFlBQU0sVUFBVSxhQUFhLFVBQVUsTUFBTTtBQUM3QyxZQUFNLE9BQU8sS0FBSyxNQUFNLE9BQU87QUFFL0Isd0JBQWtCLEVBQUMsR0FBRyxpQkFBaUIsR0FBRyxLQUFJO0FBRTlDLFVBQUksY0FBYyxRQUFRLElBQUksUUFBUSxLQUFLO0FBQUEsSUFDN0MsU0FBUyxPQUFPO0FBQ2QsVUFBSSxvQkFBb0IsUUFBUSxLQUFLLE1BQU0sT0FBTyxJQUFJLFNBQVMsS0FBSztBQUFBLElBQ3RFO0FBQUEsRUFDRjtBQUVBLFFBQU0sd0JBQXdCLG9CQUFvQixlQUFlO0FBQ2pFLFFBQU0sYUFBYSxZQUFZLFlBQVksbUJBQW1CO0FBRTlELE1BQUk7QUFDRixrQkFBYyxZQUFZLEtBQUssVUFBVSx1QkFBdUIsTUFBTSxDQUFDLEdBQUcsTUFBTTtBQUNoRixRQUFJLDRCQUE0QixVQUFVLElBQUksUUFBUSxLQUFLO0FBQUEsRUFDN0QsU0FBUyxPQUFPO0FBQ2QsUUFBSSxvQ0FBb0MsTUFBTSxPQUFPLElBQUksU0FBUyxLQUFLO0FBQUEsRUFDekU7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K
99
+
100
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy90cmFuc2xhdGlvbnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjUtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7ZXhpc3RzU3luYywgbWtkaXJTeW5jLCByZWFkRmlsZVN5bmMsIHdyaXRlRmlsZVN5bmN9IGZyb20gJ2ZzJztcbmltcG9ydCB7c3luYyBhcyBnbG9iU3luY30gZnJvbSAnZ2xvYic7XG5pbXBvcnQge3Jlc29sdmUgYXMgcGF0aFJlc29sdmV9IGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge2xvZ30gZnJvbSAnLi9sb2cuanMnO1xuXG5jb25zdCBmbGF0dGVuVHJhbnNsYXRpb25zID0gKG9iajogYW55LCBwcmVmaXggPSAnJyk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPT4ge1xuICBsZXQgZmxhdHRlbmVkOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgZm9yKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICBjb25zdCB2YWx1ZSA9IG9ialtrZXldO1xuICAgIGNvbnN0IG5ld0tleSA9IHByZWZpeCA/IGAke3ByZWZpeH0uJHtrZXl9YCA6IGtleTtcblxuICAgIGlmKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmbGF0dGVuZWQgPSB7Li4uZmxhdHRlbmVkLCAuLi5mbGF0dGVuVHJhbnNsYXRpb25zKHZhbHVlLCBuZXdLZXkpfTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxhdHRlbmVkW25ld0tleV0gPSBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmbGF0dGVuZWQ7XG59O1xuXG5jb25zdCBmaW5kVHJhbnNsYXRpb25GaWxlcyA9IChzb3VyY2VQYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSA9PiB7XG4gIGNvbnN0IHBhdHRlcm5zID0gW1xuICAgICcqKi90cmFuc2xhdGlvbnMvKi5qc29uJyxcbiAgICAnKiovaTE4bi8qLmpzb24nLFxuICAgICcqKi9sb2NhbGVzLyouanNvbicsXG4gICAgJyoqL2xhbmcvKi5qc29uJ1xuICBdO1xuXG4gIGNvbnN0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIHBhdHRlcm5zLmZvckVhY2goKHBhdHRlcm4pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGdsb2JTeW5jKHBhdHRlcm4sIHtcbiAgICAgICAgYWJzb2x1dGU6IHRydWUsXG4gICAgICAgIGN3ZDogc291cmNlUGF0aCxcbiAgICAgICAgbm9kaXI6IHRydWVcbiAgICAgIH0pO1xuICAgICAgZmlsZXMucHVzaCguLi5tYXRjaGVzKTtcbiAgICB9IGNhdGNoe1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGZpbGVzO1xufTtcblxuZXhwb3J0IGNvbnN0IHByb2Nlc3NUcmFuc2xhdGlvbnMgPSBhc3luYyAoXG4gIHNvdXJjZVBhdGg6IHN0cmluZyxcbiAgb3V0cHV0UGF0aDogc3RyaW5nLFxuICBxdWlldDogYm9vbGVhbiA9IGZhbHNlXG4pOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgaWYoIWV4aXN0c1N5bmMoc291cmNlUGF0aCkpIHtcbiAgICBsb2coYFNvdXJjZSBwYXRoIGRvZXMgbm90IGV4aXN0OiAke3NvdXJjZVBhdGh9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxvZygnRmluZGluZyB0cmFuc2xhdGlvbiBmaWxlcy4uLicsICdpbmZvJywgcXVpZXQpO1xuXG4gIGNvbnN0IHRyYW5zbGF0aW9uRmlsZXMgPSBmaW5kVHJhbnNsYXRpb25GaWxlcyhzb3VyY2VQYXRoKTtcblxuICBpZih0cmFuc2xhdGlvbkZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZygnTm8gdHJhbnNsYXRpb24gZmlsZXMgZm91bmQnLCAnd2FybicsIHF1aWV0KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsb2coYEZvdW5kICR7dHJhbnNsYXRpb25GaWxlcy5sZW5ndGh9IHRyYW5zbGF0aW9uIGZpbGVzYCwgJ2luZm8nLCBxdWlldCk7XG5cbiAgbGV0IGFsbFRyYW5zbGF0aW9uczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIGZvcihjb25zdCBmaWxlUGF0aCBvZiB0cmFuc2xhdGlvbkZpbGVzKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSByZWFkRmlsZVN5bmMoZmlsZVBhdGgsICd1dGY4Jyk7XG4gICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShjb250ZW50KTtcblxuICAgICAgYWxsVHJhbnNsYXRpb25zID0gey4uLmFsbFRyYW5zbGF0aW9ucywgLi4uZGF0YX07XG5cbiAgICAgIGxvZyhgUHJvY2Vzc2VkOiAke2ZpbGVQYXRofWAsICdpbmZvJywgcXVpZXQpO1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIGxvZyhgRXJyb3IgcHJvY2Vzc2luZyAke2ZpbGVQYXRofTogJHtlcnJvci5tZXNzYWdlfWAsICdlcnJvcicsIHF1aWV0KTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBmbGF0dGVuZWRUcmFuc2xhdGlvbnMgPSBmbGF0dGVuVHJhbnNsYXRpb25zKGFsbFRyYW5zbGF0aW9ucyk7XG4gIGNvbnN0IG91dHB1dEZpbGUgPSBwYXRoUmVzb2x2ZShvdXRwdXRQYXRoLCAndHJhbnNsYXRpb25zLmpzb24nKTtcblxuICB0cnkge1xuICAgIGNvbnN0IG91dHB1dERpciA9IHBhdGhSZXNvbHZlKG91dHB1dFBhdGgpO1xuXG4gICAgaWYoIWV4aXN0c1N5bmMob3V0cHV0RGlyKSkge1xuICAgICAgbWtkaXJTeW5jKG91dHB1dERpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuICAgIH1cblxuICAgIHdyaXRlRmlsZVN5bmMob3V0cHV0RmlsZSwgSlNPTi5zdHJpbmdpZnkoZmxhdHRlbmVkVHJhbnNsYXRpb25zLCBudWxsLCAyKSwgJ3V0ZjgnKTtcbiAgICBsb2coYFRyYW5zbGF0aW9ucyB3cml0dGVuIHRvOiAke291dHB1dEZpbGV9YCwgJ2luZm8nLCBxdWlldCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYEVycm9yIHdyaXRpbmcgdHJhbnNsYXRpb25zIGZpbGU6ICR7ZXJyb3IubWVzc2FnZX1gLCAnZXJyb3InLCBxdWlldCk7XG4gIH1cblxuICBjb25zdCBzcmNEaXIgPSBwYXRoUmVzb2x2ZShzb3VyY2VQYXRoLCAnc3JjJyk7XG4gIGNvbnN0IHNyY091dHB1dEZpbGUgPSBleGlzdHNTeW5jKHNyY0RpcikgPyBwYXRoUmVzb2x2ZShzcmNEaXIsICd0cmFuc2xhdGlvbnMuanNvbicpIDogcGF0aFJlc29sdmUoc291cmNlUGF0aCwgJ3RyYW5zbGF0aW9ucy5qc29uJyk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBlbnN1cmVEaXIgPSBleGlzdHNTeW5jKHNyY0RpcikgPyBzcmNEaXIgOiBzb3VyY2VQYXRoO1xuXG4gICAgaWYoIWV4aXN0c1N5bmMoZW5zdXJlRGlyKSkge1xuICAgICAgbWtkaXJTeW5jKGVuc3VyZURpciwge3JlY3Vyc2l2ZTogdHJ1ZX0pO1xuICAgIH1cblxuICAgIHdyaXRlRmlsZVN5bmMoc3JjT3V0cHV0RmlsZSwgSlNPTi5zdHJpbmdpZnkoZmxhdHRlbmVkVHJhbnNsYXRpb25zLCBudWxsLCAyKSwgJ3V0ZjgnKTtcbiAgICBsb2coYFRyYW5zbGF0aW9ucyB3cml0dGVuIHRvOiAke3NyY091dHB1dEZpbGV9YCwgJ2luZm8nLCBxdWlldCk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2coYEVycm9yIHdyaXRpbmcgdHJhbnNsYXRpb25zIGZpbGUgdG8gc3JjOiAke2Vycm9yLm1lc3NhZ2V9YCwgJ2Vycm9yJywgcXVpZXQpO1xuICB9XG59OyJdLCJuYW1lcyI6WyJleGlzdHNTeW5jIiwibWtkaXJTeW5jIiwicmVhZEZpbGVTeW5jIiwid3JpdGVGaWxlU3luYyIsInN5bmMiLCJnbG9iU3luYyIsInJlc29sdmUiLCJwYXRoUmVzb2x2ZSIsImxvZyIsImZsYXR0ZW5UcmFuc2xhdGlvbnMiLCJvYmoiLCJwcmVmaXgiLCJmbGF0dGVuZWQiLCJrZXkiLCJ2YWx1ZSIsIm5ld0tleSIsIkFycmF5IiwiaXNBcnJheSIsIlN0cmluZyIsImZpbmRUcmFuc2xhdGlvbkZpbGVzIiwic291cmNlUGF0aCIsInBhdHRlcm5zIiwiZmlsZXMiLCJmb3JFYWNoIiwicGF0dGVybiIsIm1hdGNoZXMiLCJhYnNvbHV0ZSIsImN3ZCIsIm5vZGlyIiwicHVzaCIsInByb2Nlc3NUcmFuc2xhdGlvbnMiLCJvdXRwdXRQYXRoIiwicXVpZXQiLCJ0cmFuc2xhdGlvbkZpbGVzIiwibGVuZ3RoIiwiYWxsVHJhbnNsYXRpb25zIiwiZmlsZVBhdGgiLCJjb250ZW50IiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsImVycm9yIiwibWVzc2FnZSIsImZsYXR0ZW5lZFRyYW5zbGF0aW9ucyIsIm91dHB1dEZpbGUiLCJvdXRwdXREaXIiLCJyZWN1cnNpdmUiLCJzdHJpbmdpZnkiLCJzcmNEaXIiLCJzcmNPdXRwdXRGaWxlIiwiZW5zdXJlRGlyIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxVQUFVLEVBQUVDLFNBQVMsRUFBRUMsWUFBWSxFQUFFQyxhQUFhLFFBQU8sS0FBSztBQUN0RSxTQUFRQyxRQUFRQyxRQUFRLFFBQU8sT0FBTztBQUN0QyxTQUFRQyxXQUFXQyxXQUFXLFFBQU8sT0FBTztBQUU1QyxTQUFRQyxHQUFHLFFBQU8sV0FBVztBQUU3QixNQUFNQyxzQkFBc0IsQ0FBQ0MsS0FBVUMsU0FBUyxFQUFFO0lBQ2hELElBQUlDLFlBQW9DLENBQUM7SUFFekMsSUFBSSxNQUFNQyxPQUFPSCxJQUFLO1FBQ3BCLE1BQU1JLFFBQVFKLEdBQUcsQ0FBQ0csSUFBSTtRQUN0QixNQUFN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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nlabs/lex",
3
- "version": "1.49.4",
3
+ "version": "1.50.0",
4
4
  "description": "Lex",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -47,14 +47,14 @@
47
47
  "node": ">=22"
48
48
  },
49
49
  "scripts": {
50
- "build": "NODE_ENV=production && rm -rf lib && esbuild $(find src -name '*.ts' -not -name '*.test.ts' -not -name '*.spec.ts') --platform=node --outdir=./lib --sourcemap=inline --target=node22 --format=esm --packages=external && npm run declarations",
50
+ "build": "NODE_ENV=production && rm -rf lib && npx swc src --out-dir ./lib --source-maps inline --strip-leading-paths --extensions .ts,.tsx --ignore '**/*.test.ts' --ignore '**/*.spec.ts' && npm run declarations",
51
51
  "build:all": "npm run build && npm run build:ai",
52
- "build:ai": "NODE_ENV=production && esbuild src/commands/ai/*.ts --platform=node --outdir=./lib/commands/ai --sourcemap=inline --target=node22 --format=esm --packages=external",
52
+ "build:ai": "NODE_ENV=production && npx swc 'src/commands/ai/**/*.{ts,tsx}' --out-dir ./lib/commands/ai --source-maps inline",
53
53
  "declarations": "tsc -p tsconfig.build.json",
54
54
  "clean": "rm -rf lib node_modules package-lock.json *.log coverage",
55
55
  "compile": "tsc -p tsconfig.build.json",
56
56
  "env": "LEX_CONFIG='{\"useTypescript\":true}'",
57
- "lint": "eslint ./src --fix --no-warn-ignored",
57
+ "lint": "eslint ./src --fix --no-warn-ignored --ignore-pattern '**/*.js' --ignore-pattern '**/*.md'",
58
58
  "lint:ai": "node ./lib/lex.js lint --fix",
59
59
  "lint:rebuild": "npm run build && npm run lint:ai",
60
60
  "prepublishOnly": "npm run build",
@@ -77,96 +77,95 @@
77
77
  "ci:build": "npm run build && npm run package",
78
78
  "ci:deploy": "npm run prepublishOnly",
79
79
  "update": "npm-check-updates -i",
80
- "watch": "NODE_ENV=development rm -rf lib && npm run compile -w"
80
+ "watch": "NODE_ENV=development rm -rf lib && npx swc src --out-dir ./lib --source-maps inline --strip-leading-paths --extensions .ts,.tsx --ignore '**/*.test.ts' --ignore '**/*.spec.ts' --watch"
81
81
  },
82
82
  "dependencies": {
83
- "@babel/core": "^7.28.0",
83
+ "@babel/core": "^7.28.4",
84
84
  "@babel/plugin-transform-nullish-coalescing-operator": "^7.27.1",
85
85
  "@babel/plugin-transform-optional-chaining": "^7.27.1",
86
- "@babel/plugin-transform-runtime": "^7.28.0",
87
- "@babel/preset-env": "^7.28.0",
86
+ "@babel/plugin-transform-react-jsx": "^7.27.1",
87
+ "@babel/plugin-transform-runtime": "^7.28.3",
88
+ "@babel/preset-env": "^7.28.3",
88
89
  "@babel/preset-react": "^7.27.1",
89
90
  "@babel/preset-typescript": "7.27.1",
90
- "@luckycatfactory/esbuild-graphql-loader": "^3.8.1",
91
- "@mdx-js/loader": "^3.1.0",
91
+ "@babel/runtime": "^7.28.4",
92
+ "@babel/runtime-corejs3": "^7.28.4",
93
+ "@mdx-js/loader": "^3.1.1",
92
94
  "@nlabs/webpack-plugin-static-site": "*",
93
95
  "@storybook/addon-actions": "^9.0.8",
94
96
  "@storybook/addon-backgrounds": "^9.0.8",
95
97
  "@storybook/addon-controls": "^9.0.8",
96
- "@storybook/addon-docs": "^9.0.18",
97
- "@storybook/addon-links": "^9.0.18",
98
+ "@storybook/addon-docs": "^9.1.10",
99
+ "@storybook/addon-links": "^9.1.10",
98
100
  "@storybook/addon-postcss": "^2.0.0",
99
101
  "@storybook/addon-styling-webpack": "^2.0.0",
100
- "@storybook/addon-themes": "^9.0.18",
102
+ "@storybook/addon-themes": "^9.1.10",
101
103
  "@storybook/addon-viewport": "^9.0.8",
102
104
  "@storybook/addon-webpack5-compiler-babel": "^3.0.6",
103
- "@storybook/cli": "^9.0.18",
104
- "@storybook/react": "^9.0.18",
105
- "@storybook/react-webpack5": "^9.0.18",
105
+ "@storybook/cli": "^9.1.10",
106
+ "@storybook/react": "^9.1.10",
107
+ "@storybook/react-webpack5": "^9.1.10",
108
+ "@swc/core": "^1.13.5",
106
109
  "@tailwindcss/nesting": "^0.0.0-insiders.565cd3e",
107
- "@tailwindcss/postcss": "4.1.11",
108
- "@testing-library/jest-dom": "^6.6.4",
110
+ "@tailwindcss/postcss": "4.1.14",
111
+ "@testing-library/jest-dom": "^6.9.1",
109
112
  "@testing-library/react": "^16.3.0",
110
- "@typescript-eslint/eslint-plugin": "^8.38.0",
111
- "@typescript-eslint/parser": "^8.38.0",
112
113
  "acorn": "^8.15.0",
113
114
  "ajv": "^8.17.1",
114
115
  "assert": "^2.1.0",
115
116
  "autoprefixer": "^10.4.21",
116
- "babel-jest": "^29.7.0",
117
+ "babel-jest": "^30.2.0",
117
118
  "babel-loader": "^10.0.0",
118
119
  "babel-plugin-module-resolver": "^5.0.2",
119
120
  "babel-plugin-transform-import-meta": "^2.3.3",
120
121
  "boxen": "8.0.1",
121
122
  "buffer": "^6.0.3",
122
- "caniuse-lite": "1.0.30001731",
123
- "chalk": "^5.4.1",
124
- "commander": "^14.0.0",
123
+ "caniuse-lite": "1.0.30001747",
124
+ "chalk": "^5.6.2",
125
+ "commander": "^14.0.1",
125
126
  "compare-versions": "^6.1.1",
126
127
  "compression-webpack-plugin": "^11.1.0",
127
128
  "config-webpack-plugin": "^1.1.0",
128
- "copy-webpack-plugin": "^13.0.0",
129
- "core-js": "^3.44.0",
129
+ "copy-webpack-plugin": "^13.0.1",
130
+ "core-js": "^3.45.1",
130
131
  "crypto-js": "^4.2.0",
131
132
  "css-loader": "^7.1.2",
132
- "cssnano": "^7.1.0",
133
+ "cssnano": "^7.1.1",
133
134
  "dotenv-webpack": "^8.1.1",
134
- "download-npm-package": "^3.1.12",
135
- "esbuild": "0.25.8",
136
- "esbuild-loader": "4.3.0",
137
- "eslint": "^9.32.0",
138
- "eslint-config-styleguidejs": "^4.1.2",
135
+ "download-npm-package": "^1.0.0",
136
+ "eslint": "^9.37.0",
137
+ "eslint-config-styleguidejs": "^4.1.9",
139
138
  "execa": "9.6.0",
140
- "expect": "^30.0.5",
141
- "express": "^5.1.0",
142
- "graphql-http": "^1.22.4",
139
+ "expect": "^30.2.0",
143
140
  "exports-loader": "^5.0.0",
141
+ "express": "^5.1.0",
144
142
  "favicons-webpack-plugin": "^6.0.1",
145
143
  "file-loader": "^6.2.0",
146
144
  "find-file-up": "^2.0.1",
147
145
  "glob": "^11.0.3",
148
- "global": "^4.4.0",
146
+ "global": "^2.0.2",
149
147
  "graphql": "^16.11.0",
148
+ "graphql-http": "^1.22.4",
150
149
  "graphql-tag": "^2.12.6",
151
150
  "html-loader": "^5.1.0",
152
- "html-webpack-plugin": "^5.6.3",
151
+ "html-webpack-plugin": "^5.6.4",
153
152
  "https-browserify": "^1.0.0",
154
- "image-webpack-loader": "^8.1.0",
153
+ "image-webpack-loader": "^8.0.1",
155
154
  "imports-loader": "^5.0.0",
156
- "jest": "^29.7.0",
157
- "jest-circus": "^29.7.0",
158
- "jest-cli": "^29.7.0",
159
- "jest-environment-jsdom": "^29.7.0",
155
+ "jest": "^30.2.0",
156
+ "jest-circus": "^30.2.0",
157
+ "jest-cli": "^30.2.0",
158
+ "jest-environment-jsdom": "^30.2.0",
160
159
  "jest-transform-graphql": "2.1.0",
161
- "jest-util": "^29.7.0",
160
+ "jest-util": "^30.2.0",
162
161
  "json-d-ts": "1.0.1",
163
162
  "latest-version": "9.0.0",
164
163
  "lodash": "^4.17.21",
165
- "luxon": "^3.7.1",
164
+ "luxon": "^3.7.2",
166
165
  "net": "^1.0.2",
167
- "npm-check-updates": "^18.0.2",
168
- "openai": "^5.11.0",
169
- "ora": "8.2.0",
166
+ "npm-check-updates": "^19.0.0",
167
+ "openai": "^6.1.0",
168
+ "ora": "9.0.0",
170
169
  "os-browserify": "^0.3.0",
171
170
  "path-browserify": "^1.0.1",
172
171
  "postcss-browser-reporter": "^0.7.0",
@@ -176,41 +175,42 @@
176
175
  "postcss-for": "^2.1.1",
177
176
  "postcss-hash": "^3.0.0",
178
177
  "postcss-import": "16.1.1",
179
- "postcss-loader": "^8.1.1",
178
+ "postcss-loader": "^8.2.0",
180
179
  "postcss-nesting": "^13.0.2",
181
180
  "postcss-percentage": "^0.0.0",
182
- "postcss-preset-env": "^10.2.4",
181
+ "postcss-preset-env": "^10.4.0",
183
182
  "postcss-simple-vars": "^7.0.1",
184
183
  "postcss-svgo": "7.1.0",
185
184
  "postcss-url": "10.1.3",
186
185
  "process": "^0.11.10",
187
186
  "randombytes": "^2.1.0",
188
- "react": "^19.1.1",
189
- "react-dom": "^19.1.1",
187
+ "react": "^19.2.0",
188
+ "react-dom": "^19.2.0",
190
189
  "regenerator-runtime": "^0.14.1",
191
190
  "resolve": "^1.22.10",
192
191
  "rimraf": "^6.0.1",
193
192
  "semver": "^7.7.2",
194
193
  "source-map-loader": "^5.0.0",
195
194
  "speed-measure-webpack-plugin": "^1.5.0",
196
- "static-site-generator-webpack-plugin": "^3.4.2",
197
- "storybook": "^9.0.18",
195
+ "static-site-generator-webpack-plugin": "^3.3.0",
196
+ "storybook": "^9.1.10",
198
197
  "stream-browserify": "^3.0.0",
199
198
  "stream-http": "^3.2.0",
200
199
  "style-loader": "^4.0.0",
201
- "svg-spritemap-webpack-plugin": "^5.0.0",
200
+ "svg-spritemap-webpack-plugin": "^5.0.3",
202
201
  "svgo": "4.0.0",
203
- "tailwindcss": "^4.1.11",
202
+ "swc-loader": "^0.2.6",
203
+ "tailwindcss": "^4.1.14",
204
204
  "tls": "^0.0.1",
205
205
  "ts-node": "^10.9.2",
206
206
  "tsconfig-paths-webpack-plugin": "^4.2.0",
207
- "typescript": "5.8.3",
207
+ "typescript": "5.9.3",
208
208
  "uncrypto": "^0.1.3",
209
209
  "unicorn-magic": "^0.3.0",
210
210
  "url-loader": "^4.1.1",
211
211
  "util": "^0.12.5",
212
212
  "vm-browserify": "^1.1.2",
213
- "webpack": "5.101.0",
213
+ "webpack": "5.102.0",
214
214
  "webpack-bundle-analyzer": "^4.10.2",
215
215
  "webpack-cli": "^6.0.1",
216
216
  "webpack-merge": "^6.0.1",
@@ -219,16 +219,15 @@
219
219
  "ws": "^8.18.3"
220
220
  },
221
221
  "devDependencies": {
222
- "@babel/plugin-transform-react-jsx": "^7.27.1",
223
- "@babel/runtime": "^7.28.2",
224
- "@babel/runtime-corejs3": "^7.28.2",
222
+ "@swc/cli": "^0.7.8",
225
223
  "@types/express": "^5.0.3",
226
- "@types/jest": "^29.5.14",
224
+ "@types/jest": "^30.0.0",
227
225
  "@types/luxon": "^3.7.1",
228
- "@types/node": "^24.1.0",
226
+ "@types/node": "^24.6.2",
229
227
  "@types/ora": "^3.2.0",
230
- "@types/react": "^19.1.9",
231
- "@types/webpack": "^5.28.5"
228
+ "@types/react": "^19.2.0",
229
+ "@types/webpack": "^5.28.5",
230
+ "css-minimizer-webpack-plugin": "^7.0.2"
232
231
  },
233
232
  "resolutions": {
234
233
  "css-loader": "7.1.2"