@codyswann/lisa 2.122.0 → 2.123.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 (71) hide show
  1. package/dist/configs/eslint/expo.d.ts +10 -1
  2. package/dist/configs/eslint/expo.d.ts.map +1 -1
  3. package/dist/configs/eslint/expo.js +19 -18
  4. package/dist/configs/eslint/expo.js.map +1 -1
  5. package/dist/configs/jest/expo.d.ts +10 -1
  6. package/dist/configs/jest/expo.d.ts.map +1 -1
  7. package/dist/configs/jest/expo.js +18 -13
  8. package/dist/configs/jest/expo.js.map +1 -1
  9. package/expo/copy-overwrite/eslint.config.ts +6 -0
  10. package/expo/copy-overwrite/jest.config.ts +10 -0
  11. package/expo/copy-overwrite/knip.json +24 -2
  12. package/expo/create-only/jest.config.react-native-mock.js +22 -0
  13. package/expo/package-lisa/package.lisa.json +37 -36
  14. package/package.json +1 -1
  15. package/plugins/lisa/.claude-plugin/plugin.json +1 -1
  16. package/plugins/lisa/.codex-plugin/plugin.json +1 -1
  17. package/plugins/lisa-agy/plugin.json +1 -1
  18. package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
  19. package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
  20. package/plugins/lisa-cdk-agy/plugin.json +1 -1
  21. package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
  22. package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
  23. package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
  24. package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
  25. package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
  26. package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
  27. package/plugins/lisa-expo/skills/directory-structure/SKILL.md +32 -20
  28. package/plugins/lisa-expo/skills/directory-structure/scripts/validate_structure.py +15 -6
  29. package/plugins/lisa-expo-agy/plugin.json +1 -1
  30. package/plugins/lisa-expo-agy/skills/directory-structure/SKILL.md +32 -20
  31. package/plugins/lisa-expo-agy/skills/directory-structure/scripts/validate_structure.py +15 -6
  32. package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
  33. package/plugins/lisa-expo-copilot/skills/directory-structure/SKILL.md +32 -20
  34. package/plugins/lisa-expo-copilot/skills/directory-structure/scripts/validate_structure.py +15 -6
  35. package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
  36. package/plugins/lisa-expo-cursor/skills/directory-structure/SKILL.md +32 -20
  37. package/plugins/lisa-expo-cursor/skills/directory-structure/scripts/validate_structure.py +15 -6
  38. package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
  39. package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
  40. package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
  41. package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
  42. package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
  43. package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
  44. package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
  45. package/plugins/lisa-nestjs-agy/plugin.json +1 -1
  46. package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
  47. package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
  48. package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
  49. package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
  50. package/plugins/lisa-openclaw-agy/plugin.json +1 -1
  51. package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
  52. package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
  53. package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
  54. package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
  55. package/plugins/lisa-rails-agy/plugin.json +1 -1
  56. package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
  57. package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
  58. package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
  59. package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
  60. package/plugins/lisa-typescript-agy/plugin.json +1 -1
  61. package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
  62. package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
  63. package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
  64. package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
  65. package/plugins/lisa-wiki-agy/plugin.json +1 -1
  66. package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
  67. package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
  68. package/plugins/src/expo/skills/directory-structure/SKILL.md +32 -20
  69. package/plugins/src/expo/skills/directory-structure/scripts/validate_structure.py +15 -6
  70. package/typescript/copy-overwrite/.prettierignore +1 -0
  71. package/typescript/copy-overwrite/eslint.ignore.config.json +2 -0
@@ -6,11 +6,20 @@ export { defaultIgnores, defaultThresholds, getBaseConfigs, getBaseLanguageOptio
6
6
  * @param {string} options.tsconfigRootDir - Root directory for tsconfig.json
7
7
  * @param {string[]} [options.ignorePatterns] - Patterns to ignore
8
8
  * @param {object} [options.thresholds] - Threshold overrides
9
+ * @param {string} [options.sourceRoot] - Prefix for source-relative file globs (e.g. `"src/"` for the SDK 55+/56 `/src` convention; defaults to `""`)
9
10
  * @returns {import("eslint").Linter.Config[]} ESLint flat config array
10
11
  */
11
- export declare function getExpoConfig({ tsconfigRootDir, ignorePatterns, thresholds, }: {
12
+ export declare function getExpoConfig({ tsconfigRootDir, ignorePatterns, thresholds, sourceRoot, }: {
12
13
  tsconfigRootDir: string;
13
14
  ignorePatterns?: string[];
14
15
  thresholds?: typeof defaultThresholds;
16
+ /**
17
+ * Prefix applied to source-relative file globs (component-structure,
18
+ * ui-standards, view-memo overrides). Defaults to `""` (source at the project
19
+ * root). Set to `"src/"` for projects adopting the Expo SDK 55+/56 `/src`
20
+ * directory convention so these overrides target `src/components`,
21
+ * `src/features`, etc. Globs anchored with a leading globstar are unaffected.
22
+ */
23
+ sourceRoot?: string;
15
24
  }): import("eslint").Linter.Config[];
16
25
  //# sourceMappingURL=expo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"expo.d.ts","sourceRoot":"","sources":["../../../src/configs/eslint/expo.ts"],"names":[],"mappings":"AAsBA,OAAO,EAEL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EAGtB,cAAc,EAIf,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,cAAc,GACf,CAAC;AAwBF;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAC5B,eAAe,EACf,cAA+B,EAC/B,UAA8B,GAC/B,EAAE;IACD,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,iBAAiB,CAAC;CACvC,GAAG,OAAO,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAmQnC"}
1
+ {"version":3,"file":"expo.d.ts","sourceRoot":"","sources":["../../../src/configs/eslint/expo.ts"],"names":[],"mappings":"AAsBA,OAAO,EAEL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EAGtB,cAAc,EAIf,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,cAAc,GACf,CAAC;AAwBF;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,EAC5B,eAAe,EACf,cAA+B,EAC/B,UAA8B,EAC9B,UAAe,GAChB,EAAE;IACD,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,OAAO,iBAAiB,CAAC;IACtC;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAmQnC"}
@@ -38,9 +38,10 @@ const tailwind = require("eslint-plugin-tailwindcss");
38
38
  * @param {string} options.tsconfigRootDir - Root directory for tsconfig.json
39
39
  * @param {string[]} [options.ignorePatterns] - Patterns to ignore
40
40
  * @param {object} [options.thresholds] - Threshold overrides
41
+ * @param {string} [options.sourceRoot] - Prefix for source-relative file globs (e.g. `"src/"` for the SDK 55+/56 `/src` convention; defaults to `""`)
41
42
  * @returns {import("eslint").Linter.Config[]} ESLint flat config array
42
43
  */
43
- export function getExpoConfig({ tsconfigRootDir, ignorePatterns = defaultIgnores, thresholds = defaultThresholds, }) {
44
+ export function getExpoConfig({ tsconfigRootDir, ignorePatterns = defaultIgnores, thresholds = defaultThresholds, sourceRoot = "", }) {
44
45
  return [
45
46
  // Global ignores
46
47
  {
@@ -157,10 +158,10 @@ export function getExpoConfig({ tsconfigRootDir, ignorePatterns = defaultIgnores
157
158
  // UI components
158
159
  {
159
160
  files: [
160
- "components/ui/**/*.tsx",
161
- "components/ui/**/*.jsx",
162
- "components/custom/ui/**/*.tsx",
163
- "components/custom/ui/**/*.jsx",
161
+ `${sourceRoot}components/ui/**/*.tsx`,
162
+ `${sourceRoot}components/ui/**/*.jsx`,
163
+ `${sourceRoot}components/custom/ui/**/*.tsx`,
164
+ `${sourceRoot}components/custom/ui/**/*.jsx`,
164
165
  ],
165
166
  rules: {
166
167
  "ui-standards/no-classname-outside-ui": "off",
@@ -198,20 +199,20 @@ export function getExpoConfig({ tsconfigRootDir, ignorePatterns = defaultIgnores
198
199
  // Component structure rules
199
200
  {
200
201
  files: [
201
- "features/**/components/**/*.ts",
202
- "features/**/components/**/*.tsx",
203
- "features/**/components/**/*.jsx",
204
- "features/**/screens/**/*.ts",
205
- "features/**/screens/**/*.tsx",
206
- "features/**/screens/**/*.jsx",
207
- "components/**/*.ts",
208
- "components/**/*.tsx",
209
- "components/**/*.jsx",
202
+ `${sourceRoot}features/**/components/**/*.ts`,
203
+ `${sourceRoot}features/**/components/**/*.tsx`,
204
+ `${sourceRoot}features/**/components/**/*.jsx`,
205
+ `${sourceRoot}features/**/screens/**/*.ts`,
206
+ `${sourceRoot}features/**/screens/**/*.tsx`,
207
+ `${sourceRoot}features/**/screens/**/*.jsx`,
208
+ `${sourceRoot}components/**/*.ts`,
209
+ `${sourceRoot}components/**/*.tsx`,
210
+ `${sourceRoot}components/**/*.jsx`,
210
211
  ],
211
212
  ignores: [
212
- "components/ui/**",
213
- "components/shared/**",
214
- "components/icons/**",
213
+ `${sourceRoot}components/ui/**`,
214
+ `${sourceRoot}components/shared/**`,
215
+ `${sourceRoot}components/icons/**`,
215
216
  ],
216
217
  rules: {
217
218
  "component-structure/enforce-component-structure": "error",
@@ -228,7 +229,7 @@ export function getExpoConfig({ tsconfigRootDir, ignorePatterns = defaultIgnores
228
229
  // View memo requirement (excluding UI components)
229
230
  {
230
231
  files: ["**/*View.tsx", "**/*View.jsx"],
231
- ignores: ["components/ui/**"],
232
+ ignores: [`${sourceRoot}components/ui/**`],
232
233
  rules: {
233
234
  "component-structure/require-memo-in-view": "error",
234
235
  },
@@ -1 +1 @@
1
- {"version":3,"file":"expo.js","sourceRoot":"","sources":["../../../src/configs/eslint/expo.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E;;;;;;;;;;;;;GAaG;AACH,OAAO,MAAM,MAAM,sBAAsB,CAAC;AAC1C,OAAO,KAAK,MAAM,qBAAqB,CAAC;AACxC,OAAO,aAAa,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,yCAAyC;AACzC,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,mCAAmC;AACnC,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,cAAc,GACf,CAAC;AAEF,+EAA+E;AAC/E,kFAAkF;AAClF,uFAAuF;AACvF,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,kBAAkB,GAAG,OAAO,CAChC,aAAa,CACX,IAAI,GAAG,CACL,qDAAqD,EACrD,MAAM,CAAC,IAAI,CAAC,GAAG,CAChB,CACF,CACF,CAAC;AACF,MAAM,WAAW,GAAG,OAAO,CACzB,aAAa,CACX,IAAI,GAAG,CAAC,8CAA8C,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CACzE,CACF,CAAC;AACF,MAAM,UAAU,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAAC;AACtD,MAAM,SAAS,GAAG,OAAO,CAAC,0BAA0B,CAAC,CAAC;AACtD,MAAM,OAAO,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC;AAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;AAEtD;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,EAC5B,eAAe,EACf,cAAc,GAAG,cAAc,EAC/B,UAAU,GAAG,iBAAiB,GAK/B;IACC,OAAO;QACL,iBAAiB;QACjB;YACE,OAAO,EAAE,cAAc;SACxB;QAED,yCAAyC;QACzC,GAAG,cAAc,EAAE;QAEnB,+BAA+B;QAC/B,GAAG,UAAU;QAEb,uBAAuB;QACvB,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW;QAC9B,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC;QAEjC,gBAAgB;QAChB,OAAO,CAAC,WAAW,CAAC,MAAM;QAE1B,eAAe;QACf,GAAG,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC;QAEvC,cAAc;QACd,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW;QAElC,mCAAmC;QACnC;YACE,eAAe,EAAE;gBACf,GAAG,sBAAsB,EAAE;gBAC3B,aAAa,EAAE;oBACb,GAAG,sBAAsB,EAAE,CAAC,aAAa;oBACzC,YAAY,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE;iBAC5B;aACF;YACD,OAAO,EAAE;gBACP,qBAAqB,EAAE,kBAAkB;gBACzC,mBAAmB,EAAE,gBAAgB;gBACrC,gBAAgB,EAAE,aAAa;gBAC/B,cAAc,EAAE,WAAW;aAC5B;YACD,KAAK,EAAE;gBACL,yBAAyB;gBACzB,GAAG,cAAc,CAAC,UAAU,CAAC;gBAE7B,oBAAoB;gBACpB,2CAA2C,EAAE,OAAO;gBAEpD,oCAAoC;gBACpC,sCAAsC,EAAE,KAAK;gBAC7C,mCAAmC,EAAE,KAAK;gBAE1C,WAAW;gBACX,8BAA8B,EAAE;oBAC9B,OAAO;oBACP;wBACE,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;qBAC3D;iBACF;gBAED,eAAe;gBACf,+DAA+D;gBAC/D,6BAA6B;gBAC7B,iBAAiB,EAAE,KAAK;gBACxB,kBAAkB,EAAE,KAAK;gBACzB,mEAAmE;gBACnE,sBAAsB,EAAE,KAAK,EAAE,wFAAwF;gBACvH,8BAA8B,EAAE,KAAK;gBACrC,sBAAsB,EAAE,OAAO;gBAE/B,oBAAoB;gBACpB,sCAAsC,EAAE,OAAO;gBAC/C,qCAAqC,EAAE,OAAO;gBAC9C,wCAAwC,EAAE,OAAO;gBAEjD,cAAc;gBACd,yCAAyC,EAAE,OAAO;gBAClD,sBAAsB,EAAE,KAAK;gBAC7B,0BAA0B,EAAE,KAAK;gBACjC,6BAA6B,EAAE,OAAO;gBACtC,4BAA4B,EAAE,OAAO;gBACrC,iCAAiC,EAAE,OAAO;gBAC1C,yCAAyC,EAAE,OAAO;gBAClD,kBAAkB,EAAE,OAAO;gBAC3B,0BAA0B,EAAE,OAAO;gBACnC,+DAA+D;gBAC/D,6BAA6B;gBAC7B,+BAA+B,EAAE,KAAK;gBACtC,+BAA+B,EAAE,KAAK;gBACtC,mEAAmE;gBACnE,6DAA6D;gBAC7D,+CAA+C;gBAC/C,sBAAsB,EAAE;oBACtB,OAAO;oBACP;wBACE,QAAQ,EACN,8DAA8D;wBAChE,OAAO,EACL,iIAAiI;qBACpI;iBACF;gBAED,4BAA4B;gBAC5B,YAAY,EAAE,MAAM;gBAEpB,oFAAoF;gBACpF,uBAAuB,EAAE,OAAO;gBAEhC,kEAAkE;gBAClE,qBAAqB,EAAE;oBACrB,OAAO;oBACP;wBACE,OAAO,EAAE;4BACP,mBAAmB,EAAE,IAAI;4BACzB,gBAAgB,EAAE,KAAK;4BACvB,gBAAgB,EAAE,KAAK;4BACvB,uBAAuB,EAAE,KAAK;4BAC9B,kBAAkB,EAAE,KAAK;yBAC1B;wBACD,QAAQ,EAAE;4BACR,wBAAwB;4BACxB,wBAAwB;4BACxB,iGAAiG;yBAClG;qBACF;iBACF;aACF;SACF;QAED,4BAA4B;QAC5B,kBAAkB,EAAE;QAEpB,8BAA8B;QAC9B,sBAAsB,EAAE;QAExB,gBAAgB;QAChB;YACE,KAAK,EAAE;gBACL,wBAAwB;gBACxB,wBAAwB;gBACxB,+BAA+B;gBAC/B,+BAA+B;aAChC;YACD,KAAK,EAAE;gBACL,sCAAsC,EAAE,KAAK;aAC9C;SACF;QAED,gDAAgD;QAChD,oBAAoB,CAAC;YACnB,eAAe;YACf,eAAe;YACf,cAAc;YACd,cAAc;SACf,CAAC;QAEF,gEAAgE;QAChE;YACE,GAAG,kBAAkB,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,eAAe,CAAC;YAC/D,KAAK,EAAE;gBACL,GAAG,kBAAkB,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE,eAAe,CAAC,CAAC,KAAK;gBACrE,kBAAkB,EAAE,KAAK;aAC1B;SACF;QAED,qDAAqD;QACrD;YACE,KAAK,EAAE,CAAC,UAAU,CAAC;YACnB,KAAK,EAAE;gBACL,uBAAuB,EAAE,KAAK;aAC/B;SACF;QAED,qFAAqF;QACrF,sBAAsB,CAAC;YACrB,cAAc;YACd,eAAe;YACf,aAAa;YACb,cAAc;SACf,CAAC;QAEF,4BAA4B;QAC5B;YACE,KAAK,EAAE;gBACL,gCAAgC;gBAChC,iCAAiC;gBACjC,iCAAiC;gBACjC,6BAA6B;gBAC7B,8BAA8B;gBAC9B,8BAA8B;gBAC9B,oBAAoB;gBACpB,qBAAqB;gBACrB,qBAAqB;aACtB;YACD,OAAO,EAAE;gBACP,kBAAkB;gBAClB,sBAAsB;gBACtB,qBAAqB;aACtB;YACD,KAAK,EAAE;gBACL,iDAAiD,EAAE,OAAO;gBAC1D,+CAA+C,EAAE,OAAO;aACzD;SACF;QAED,uBAAuB;QACvB;YACE,KAAK,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC;YACvC,KAAK,EAAE;gBACL,uCAAuC,EAAE,OAAO;aACjD;SACF;QAED,kDAAkD;QAClD;YACE,KAAK,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC;YACvC,OAAO,EAAE,CAAC,kBAAkB,CAAC;YAC7B,KAAK,EAAE;gBACL,0CAA0C,EAAE,OAAO;aACpD;SACF;QAED,gEAAgE;QAChE,wEAAwE;QACxE,+CAA+C;QAC/C;YACE,KAAK,EAAE,CAAC,gBAAgB,EAAE,YAAY,EAAE,2BAA2B,CAAC;YACpE,KAAK,EAAE;gBACL,sBAAsB,EAAE,KAAK;aAC9B;SACF;QAED,oEAAoE;QACpE,kEAAkE;QAClE;YACE,KAAK,EAAE;gBACL,+BAA+B;gBAC/B,wBAAwB;gBACxB,2BAA2B;aAC5B;YACD,KAAK,EAAE;gBACL,sBAAsB,EAAE,KAAK;aAC9B;SACF;QAED,4DAA4D;QAC5D;YACE,KAAK,EAAE,CAAC,cAAc,EAAE,iBAAiB,EAAE,YAAY,CAAC;YACxD,KAAK,EAAE;gBACL,sBAAsB,EAAE,KAAK;aAC9B;SACF;QAED,2EAA2E;QAC3E,wEAAwE;QACxE,mCAAmC;QACnC,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC;QAC/B,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;KACY,CAAC;AACnD,CAAC;AAED,8EAA8E"}
1
+ {"version":3,"file":"expo.js","sourceRoot":"","sources":["../../../src/configs/eslint/expo.ts"],"names":[],"mappings":"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"}
@@ -40,15 +40,24 @@ export { defaultCoverageExclusions, defaultThresholds, mergeConfigs, mergeThresh
40
40
  interface ExpoJestOptions {
41
41
  /** Coverage thresholds (merged defaults + project overrides) */
42
42
  readonly thresholds?: Config["coverageThreshold"];
43
+ /**
44
+ * Prefix applied to the positive `collectCoverageFrom` globs. Defaults to
45
+ * `""` (source at the project root). Set to `"src/"` for projects that adopt
46
+ * the Expo SDK 55+/56 `/src` directory convention so coverage is collected
47
+ * from `src/components`, `src/features`, etc. The negative (exclusion) globs
48
+ * are anchored with a leading globstar and are unaffected by this prefix.
49
+ */
50
+ readonly sourceRoot?: string;
43
51
  }
44
52
  /**
45
53
  * Creates a Jest configuration for Expo/React Native projects.
46
54
  * @param options - Configuration options for threshold overrides
47
55
  * @param options.thresholds - Coverage thresholds (merged defaults + project overrides)
56
+ * @param options.sourceRoot - Prefix for coverage globs (e.g. `"src/"` for the SDK 55+/56 `/src` convention; defaults to `""`)
48
57
  * @returns Jest config object with jsdom environment, babel-jest transform, and React Native resolver
49
58
  * @remarks Avoids `jest-expo` preset to prevent jsdom + `react-native/jest/setup.js`
50
59
  * incompatibility. Manually configures haste, resolver, and transform to match the
51
60
  * preset's behavior without the problematic window redefinition.
52
61
  */
53
- export declare const getExpoJestConfig: ({ thresholds, }?: ExpoJestOptions) => Config;
62
+ export declare const getExpoJestConfig: ({ thresholds, sourceRoot, }?: ExpoJestOptions) => Config;
54
63
  //# sourceMappingURL=expo.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"expo.d.ts","sourceRoot":"","sources":["../../../src/configs/jest/expo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,8BAA8B,EAC/B,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,8BAA8B,GAC/B,CAAC;AAEF;;GAEG;AACH,UAAU,eAAe;IACvB,gEAAgE;IAChE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;CACnD;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,GAAI,kBAE/B,eAAoB,KAAG,MAmDxB,CAAC"}
1
+ {"version":3,"file":"expo.d.ts","sourceRoot":"","sources":["../../../src/configs/jest/expo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,8BAA8B,EAC/B,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,8BAA8B,GAC/B,CAAC;AAEF;;GAEG;AACH,UAAU,eAAe;IACvB,gEAAgE;IAChE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAClD;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,GAAI,8BAG/B,eAAoB,KAAG,MAuDxB,CAAC"}
@@ -5,18 +5,23 @@ export { defaultCoverageExclusions, defaultThresholds, mergeConfigs, mergeThresh
5
5
  * Creates a Jest configuration for Expo/React Native projects.
6
6
  * @param options - Configuration options for threshold overrides
7
7
  * @param options.thresholds - Coverage thresholds (merged defaults + project overrides)
8
+ * @param options.sourceRoot - Prefix for coverage globs (e.g. `"src/"` for the SDK 55+/56 `/src` convention; defaults to `""`)
8
9
  * @returns Jest config object with jsdom environment, babel-jest transform, and React Native resolver
9
10
  * @remarks Avoids `jest-expo` preset to prevent jsdom + `react-native/jest/setup.js`
10
11
  * incompatibility. Manually configures haste, resolver, and transform to match the
11
12
  * preset's behavior without the problematic window redefinition.
12
13
  */
13
- export const getExpoJestConfig = ({ thresholds = defaultThresholds, } = {}) => ({
14
+ export const getExpoJestConfig = ({ thresholds = defaultThresholds, sourceRoot = "", } = {}) => ({
14
15
  testEnvironment: "jsdom",
15
16
  haste: {
16
17
  defaultPlatform: "ios",
17
18
  platforms: ["android", "ios", "native"],
18
19
  },
19
- resolver: "react-native/jest/resolver.js",
20
+ // SDK 56 / RN 0.85 relocated the React Native Jest resolver out of
21
+ // `react-native/jest/resolver.js` and into `@react-native/jest-preset`.
22
+ // This resolver is what teaches Jest to resolve platform-extension files
23
+ // (`.ios`/`.native`/`.web`); without it those variants do not resolve.
24
+ resolver: "@react-native/jest-preset/jest/resolver.js",
20
25
  setupFiles: ["<rootDir>/jest.setup.pre.js"],
21
26
  setupFilesAfterEnv: ["<rootDir>/jest.setup.ts"],
22
27
  transform: {
@@ -44,17 +49,17 @@ export const getExpoJestConfig = ({ thresholds = defaultThresholds, } = {}) => (
44
49
  ],
45
50
  moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"],
46
51
  collectCoverageFrom: [
47
- "components/**/*.{ts,tsx}",
48
- "config/**/*.{ts,tsx}",
49
- "constants/**/*.{ts,tsx}",
50
- "features/**/*.{ts,tsx}",
51
- "hooks/**/*.{ts,tsx}",
52
- "lib/**/*.{ts,tsx}",
53
- "providers/**/*.{ts,tsx}",
54
- "shared/**/*.{ts,tsx}",
55
- "stores/**/*.{ts,tsx}",
56
- "types/**/*.{ts,tsx}",
57
- "utils/**/*.{ts,tsx}",
52
+ `${sourceRoot}components/**/*.{ts,tsx}`,
53
+ `${sourceRoot}config/**/*.{ts,tsx}`,
54
+ `${sourceRoot}constants/**/*.{ts,tsx}`,
55
+ `${sourceRoot}features/**/*.{ts,tsx}`,
56
+ `${sourceRoot}hooks/**/*.{ts,tsx}`,
57
+ `${sourceRoot}lib/**/*.{ts,tsx}`,
58
+ `${sourceRoot}providers/**/*.{ts,tsx}`,
59
+ `${sourceRoot}shared/**/*.{ts,tsx}`,
60
+ `${sourceRoot}stores/**/*.{ts,tsx}`,
61
+ `${sourceRoot}types/**/*.{ts,tsx}`,
62
+ `${sourceRoot}utils/**/*.{ts,tsx}`,
58
63
  "!**/*View.{ts,tsx}",
59
64
  ...defaultCoverageExclusions,
60
65
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"expo.js","sourceRoot":"","sources":["../../../src/configs/jest/expo.ts"],"names":[],"mappings":"AAmCA,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,8BAA8B,GAC/B,MAAM,WAAW,CAAC;AAEnB,mDAAmD;AACnD,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,8BAA8B,GAC/B,CAAC;AAUF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,UAAU,GAAG,iBAAiB,MACX,EAAE,EAAU,EAAE,CAAC,CAAC;IACnC,eAAe,EAAE,OAAO;IACxB,KAAK,EAAE;QACL,eAAe,EAAE,KAAK;QACtB,SAAS,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC;KACxC;IACD,QAAQ,EAAE,+BAA+B;IACzC,UAAU,EAAE,CAAC,6BAA6B,CAAC;IAC3C,kBAAkB,EAAE,CAAC,yBAAyB,CAAC;IAC/C,SAAS,EAAE;QACT,aAAa,EAAE;YACb,YAAY;YACZ;gBACE,MAAM,EAAE;oBACN,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,OAAO;oBAChB,QAAQ,EAAE,KAAK;iBAChB;aACF;SACF;QACD,mEAAmE,EACjE,8CAA8C;KACjD;IACD,SAAS,EAAE,CAAC,wBAAwB,EAAE,yBAAyB,CAAC;IAChE,sBAAsB,EAAE;QACtB,gBAAgB;QAChB,QAAQ;QACR,SAAS;QACT,GAAG,8BAA8B,EAAE;KACpC;IACD,uBAAuB,EAAE;QACvB,0WAA0W;KAC3W;IACD,oBAAoB,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;IAChE,mBAAmB,EAAE;QACnB,0BAA0B;QAC1B,sBAAsB;QACtB,yBAAyB;QACzB,wBAAwB;QACxB,qBAAqB;QACrB,mBAAmB;QACnB,yBAAyB;QACzB,sBAAsB;QACtB,sBAAsB;QACtB,qBAAqB;QACrB,qBAAqB;QACrB,oBAAoB;QACpB,GAAG,yBAAyB;KAC7B;IACD,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,WAAW,EAAE,KAAK;CACnB,CAAC,CAAC"}
1
+ {"version":3,"file":"expo.js","sourceRoot":"","sources":["../../../src/configs/jest/expo.ts"],"names":[],"mappings":"AAmCA,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,8BAA8B,GAC/B,MAAM,WAAW,CAAC;AAEnB,mDAAmD;AACnD,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,8BAA8B,GAC/B,CAAC;AAkBF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,EAChC,UAAU,GAAG,iBAAiB,EAC9B,UAAU,GAAG,EAAE,MACI,EAAE,EAAU,EAAE,CAAC,CAAC;IACnC,eAAe,EAAE,OAAO;IACxB,KAAK,EAAE;QACL,eAAe,EAAE,KAAK;QACtB,SAAS,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC;KACxC;IACD,mEAAmE;IACnE,wEAAwE;IACxE,yEAAyE;IACzE,uEAAuE;IACvE,QAAQ,EAAE,4CAA4C;IACtD,UAAU,EAAE,CAAC,6BAA6B,CAAC;IAC3C,kBAAkB,EAAE,CAAC,yBAAyB,CAAC;IAC/C,SAAS,EAAE;QACT,aAAa,EAAE;YACb,YAAY;YACZ;gBACE,MAAM,EAAE;oBACN,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,OAAO;oBAChB,QAAQ,EAAE,KAAK;iBAChB;aACF;SACF;QACD,mEAAmE,EACjE,8CAA8C;KACjD;IACD,SAAS,EAAE,CAAC,wBAAwB,EAAE,yBAAyB,CAAC;IAChE,sBAAsB,EAAE;QACtB,gBAAgB;QAChB,QAAQ;QACR,SAAS;QACT,GAAG,8BAA8B,EAAE;KACpC;IACD,uBAAuB,EAAE;QACvB,0WAA0W;KAC3W;IACD,oBAAoB,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;IAChE,mBAAmB,EAAE;QACnB,GAAG,UAAU,0BAA0B;QACvC,GAAG,UAAU,sBAAsB;QACnC,GAAG,UAAU,yBAAyB;QACtC,GAAG,UAAU,wBAAwB;QACrC,GAAG,UAAU,qBAAqB;QAClC,GAAG,UAAU,mBAAmB;QAChC,GAAG,UAAU,yBAAyB;QACtC,GAAG,UAAU,sBAAsB;QACnC,GAAG,UAAU,sBAAsB;QACnC,GAAG,UAAU,qBAAqB;QAClC,GAAG,UAAU,qBAAqB;QAClC,oBAAoB;QACpB,GAAG,yBAAyB;KAC7B;IACD,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,WAAW,EAAE,KAAK;CACnB,CAAC,CAAC"}
@@ -12,6 +12,7 @@
12
12
  * @see https://eslint.org/docs/latest/use/configure/configuration-files-new
13
13
  * @module eslint.config
14
14
  */
15
+ import { existsSync } from "fs";
15
16
  import path from "path";
16
17
  import { fileURLToPath } from "url";
17
18
 
@@ -28,11 +29,16 @@ import localConfig from "./eslint.config.local";
28
29
  const __filename = fileURLToPath(import.meta.url);
29
30
  const __dirname = path.dirname(__filename);
30
31
 
32
+ // Auto-detect the Expo SDK 55+/56 `/src` convention so the component-structure,
33
+ // ui-standards, and view-memo overrides target `src/...` instead of the root.
34
+ const sourceRoot = existsSync(path.join(__dirname, "src", "app")) ? "src/" : "";
35
+
31
36
  export default [
32
37
  ...getExpoConfig({
33
38
  tsconfigRootDir: __dirname,
34
39
  ignorePatterns: ignoreConfig.ignores || defaultIgnores,
35
40
  thresholds: { ...defaultThresholds, ...thresholdsConfig },
41
+ sourceRoot,
36
42
  }),
37
43
  ...localConfig,
38
44
  ];
@@ -14,6 +14,9 @@
14
14
  * @see https://jestjs.io/docs/configuration
15
15
  * @module jest.config
16
16
  */
17
+ import { existsSync } from "node:fs";
18
+ import { join } from "node:path";
19
+
17
20
  import {
18
21
  defaultThresholds,
19
22
  getExpoJestConfig,
@@ -24,9 +27,16 @@ import {
24
27
  import localConfig from "./jest.config.local.ts";
25
28
  import thresholdsOverrides from "./jest.thresholds.json" with { type: "json" };
26
29
 
30
+ // Auto-detect the Expo SDK 55+/56 `/src` convention. When source lives under
31
+ // `src/`, pass `sourceRoot: "src/"` so the factory anchors `collectCoverageFrom`
32
+ // at `src/...` in a single correctly-ordered array — avoiding the glob-ordering
33
+ // trap that arises if a project instead re-anchors coverage via a local override.
34
+ const sourceRoot = existsSync(join(process.cwd(), "src", "app")) ? "src/" : "";
35
+
27
36
  export default mergeConfigs(
28
37
  getExpoJestConfig({
29
38
  thresholds: mergeThresholds(defaultThresholds, thresholdsOverrides),
39
+ sourceRoot,
30
40
  }),
31
41
  localConfig
32
42
  );
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "$schema": "https://unpkg.com/knip@5/schema.json",
3
3
  "entry": [
4
+ "index.tsx",
4
5
  "app/**/*.{ts,tsx}",
5
6
  "components/**/*.{ts,tsx}",
6
7
  "features/**/*.{ts,tsx}",
@@ -10,9 +11,20 @@
10
11
  "providers/**/*.{ts,tsx}",
11
12
  "constants/**/*.{ts,tsx}",
12
13
  "types/**/*.{ts,tsx}",
13
- "config/**/*.{ts,tsx}"
14
+ "config/**/*.{ts,tsx}",
15
+ "src/app/**/*.{ts,tsx}",
16
+ "src/components/**/*.{ts,tsx}",
17
+ "src/features/**/*.{ts,tsx}",
18
+ "src/hooks/**/*.{ts,tsx}",
19
+ "src/utils/**/*.{ts,tsx}",
20
+ "src/stores/**/*.{ts,tsx}",
21
+ "src/providers/**/*.{ts,tsx}",
22
+ "src/constants/**/*.{ts,tsx}",
23
+ "src/types/**/*.{ts,tsx}",
24
+ "src/config/**/*.{ts,tsx}"
14
25
  ],
15
26
  "project": [
27
+ "index.tsx",
16
28
  "app/**/*.{ts,tsx}",
17
29
  "components/**/*.{ts,tsx}",
18
30
  "features/**/*.{ts,tsx}",
@@ -22,7 +34,17 @@
22
34
  "providers/**/*.{ts,tsx}",
23
35
  "constants/**/*.{ts,tsx}",
24
36
  "types/**/*.{ts,tsx}",
25
- "config/**/*.{ts,tsx}"
37
+ "config/**/*.{ts,tsx}",
38
+ "src/app/**/*.{ts,tsx}",
39
+ "src/components/**/*.{ts,tsx}",
40
+ "src/features/**/*.{ts,tsx}",
41
+ "src/hooks/**/*.{ts,tsx}",
42
+ "src/utils/**/*.{ts,tsx}",
43
+ "src/stores/**/*.{ts,tsx}",
44
+ "src/providers/**/*.{ts,tsx}",
45
+ "src/constants/**/*.{ts,tsx}",
46
+ "src/types/**/*.{ts,tsx}",
47
+ "src/config/**/*.{ts,tsx}"
26
48
  ],
27
49
  "ignore": [
28
50
  "**/*.test.ts",
@@ -77,6 +77,28 @@ module.exports = {
77
77
  addListener: () => ({ remove: () => {} }),
78
78
  removeListeners: () => {},
79
79
  },
80
+ // SDK 56 / RN 0.85: AccessibilityInfo eagerly reads the AccessibilityManager
81
+ // TurboModule. Without a mock the module resolves to null and AccessibilityInfo
82
+ // methods reject with "NativeAccessibilityManagerIOS is not available", which
83
+ // the unhandledRejection handler escalates into a Jest worker crash that takes
84
+ // down every suite touching accessibility.
85
+ AccessibilityManager: {
86
+ getCurrentBoldTextState: onSuccess => onSuccess(false),
87
+ getCurrentGrayscaleState: onSuccess => onSuccess(false),
88
+ getCurrentInvertColorsState: onSuccess => onSuccess(false),
89
+ getCurrentReduceMotionState: onSuccess => onSuccess(false),
90
+ getCurrentDarkerSystemColorsState: onSuccess => onSuccess(false),
91
+ getCurrentPrefersCrossFadeTransitionsState: onSuccess => onSuccess(false),
92
+ getCurrentReduceTransparencyState: onSuccess => onSuccess(false),
93
+ getCurrentVoiceOverState: onSuccess => onSuccess(false),
94
+ setAccessibilityContentSizeMultipliers: () => {},
95
+ setAccessibilityFocus: () => {},
96
+ announceForAccessibility: () => {},
97
+ announceForAccessibilityWithOptions: () => {},
98
+ addListener: () => {},
99
+ removeListeners: () => {},
100
+ getConstants: () => ({}),
101
+ },
80
102
  DeviceInfo: {
81
103
  getConstants: () => ({
82
104
  Dimensions: {
@@ -41,9 +41,9 @@
41
41
  "eas:deploy:dev": "eas build --profile dev --non-interactive",
42
42
  "eas:deploy:staging": "eas build --profile staging --non-interactive",
43
43
  "eas:deploy:production": "eas build --profile production --non-interactive",
44
- "eas:publish:dev": "eas update --channel dev --non-interactive",
45
- "eas:publish:staging": "eas update --channel staging --non-interactive",
46
- "eas:publish:production": "eas update --channel production --non-interactive",
44
+ "eas:publish:dev": "eas update --channel dev --environment development --non-interactive",
45
+ "eas:publish:staging": "eas update --channel staging --environment preview --non-interactive",
46
+ "eas:publish:production": "eas update --channel production --environment production --non-interactive",
47
47
  "security:zap": "bash scripts/zap-baseline.sh",
48
48
  "test": "NODE_ENV=test jest --passWithNoTests",
49
49
  "test:unit": "NODE_ENV=test jest --testPathIgnorePatterns=\"\\.integration[.\\\\-](test|spec)\\.(ts|tsx)$\" --passWithNoTests",
@@ -66,49 +66,49 @@
66
66
  "@react-native-masked-view/masked-view": "^0.3.2",
67
67
  "@react-navigation/drawer": "^7.5.0",
68
68
  "@react-navigation/elements": "^1.3.31",
69
- "@sentry/react-native": "7.2.0",
69
+ "@sentry/react-native": "~7.11.0",
70
70
  "@shopify/flash-list": "2.0.2",
71
- "@shopify/react-native-skia": "2.2.12",
71
+ "@shopify/react-native-skia": "2.6.2",
72
72
  "apollo-link-sentry": "^4.0.0",
73
73
  "base-64": "^1.0.0",
74
74
  "date-fns": "^3.6.0",
75
75
  "date-fns-tz": "^3.1.3",
76
76
  "events": "^3.3.0",
77
- "expo": "~54.0.31",
78
- "expo-application": "~7.0.8",
79
- "expo-battery": "~10.0.8",
80
- "expo-build-properties": "~1.0.10",
81
- "expo-clipboard": "~8.0.8",
82
- "expo-constants": "~18.0.13",
83
- "expo-crypto": "^15.0.8",
84
- "expo-dev-client": "~6.0.20",
85
- "expo-device": "~8.0.10",
86
- "expo-font": "~14.0.10",
87
- "expo-linear-gradient": "~15.0.8",
88
- "expo-linking": "~8.0.11",
89
- "expo-localization": "^17.0.8",
90
- "expo-network": "~8.0.8",
91
- "expo-notifications": "~0.32.16",
92
- "expo-router": "~6.0.21",
93
- "expo-secure-store": "~15.0.8",
94
- "expo-splash-screen": "~31.0.13",
95
- "expo-status-bar": "~3.0.9",
96
- "expo-system-ui": "~6.0.9",
97
- "expo-updates": "~29.0.16",
77
+ "expo": "~56.0.0",
78
+ "expo-application": "~56.0.3",
79
+ "expo-battery": "~56.0.4",
80
+ "expo-build-properties": "~56.0.15",
81
+ "expo-clipboard": "~56.0.3",
82
+ "expo-constants": "~56.0.16",
83
+ "expo-crypto": "~56.0.4",
84
+ "expo-dev-client": "~56.0.16",
85
+ "expo-device": "~56.0.4",
86
+ "expo-font": "~56.0.5",
87
+ "expo-linear-gradient": "~56.0.4",
88
+ "expo-linking": "~56.0.12",
89
+ "expo-localization": "~56.0.6",
90
+ "expo-network": "~56.0.4",
91
+ "expo-notifications": "~56.0.14",
92
+ "expo-router": "~56.2.7",
93
+ "expo-secure-store": "~56.0.4",
94
+ "expo-splash-screen": "~56.0.10",
95
+ "expo-status-bar": "~56.0.4",
96
+ "expo-system-ui": "~56.0.5",
97
+ "expo-updates": "~56.0.17",
98
98
  "graphql": "^16.12.0",
99
99
  "i18n-js": "^4.5.1",
100
100
  "lucide-react-native": "^0.562.0",
101
101
  "nativewind": "^4.2.1",
102
102
  "patch-package": "^8.0.0",
103
- "react": "19.1.0",
104
- "react-dom": "19.1.0",
103
+ "react": "19.2.3",
104
+ "react-dom": "19.2.3",
105
105
  "react-hook-form": "^7.70.0",
106
- "react-native": "0.81.4",
107
- "react-native-gesture-handler": "~2.30.0",
108
- "react-native-keyboard-controller": "1.20.4",
109
- "react-native-reanimated": "~4.2.1",
106
+ "react-native": "0.85.3",
107
+ "react-native-gesture-handler": "~2.31.1",
108
+ "react-native-keyboard-controller": "1.21.6",
109
+ "react-native-reanimated": "4.3.1",
110
110
  "react-native-safe-area-context": "^5.6.2",
111
- "react-native-screens": "~4.19.0",
111
+ "react-native-screens": "4.25.2",
112
112
  "react-native-svg": "^15.15.1",
113
113
  "react-native-web": "^0.21.2",
114
114
  "tailwindcss": "^3.4.7",
@@ -134,8 +134,8 @@
134
134
  "@types/base-64": "^1.0.2",
135
135
  "@types/eslint-plugin-jsx-a11y": "^6.10.1",
136
136
  "@types/eslint-plugin-tailwindcss": "^3.17.0",
137
- "@types/react": "~19.1.10",
138
- "@types/react-dom": "^19.1.7",
137
+ "@types/react": "~19.2.15",
138
+ "@types/react-dom": "~19.2.3",
139
139
  "babel-plugin-module-resolver": "^5.0.2",
140
140
  "baseline-browser-mapping": "^2.9.2",
141
141
  "expo-atlas": "^0.4.0",
@@ -144,7 +144,8 @@
144
144
  "@types/jest": "^30.0.0",
145
145
  "@jest/test-sequencer": "^30.2.0",
146
146
  "jest-environment-jsdom": "^30.2.0",
147
- "jest-expo": "^54.0.12",
147
+ "jest-expo": "~56.0.4",
148
+ "react-test-renderer": "19.2.3",
148
149
  "serve": "^14.2.0",
149
150
  "eslint-plugin-oxlint": "^1.62.0",
150
151
  "oxlint": "^1.62.0",
package/package.json CHANGED
@@ -83,7 +83,7 @@
83
83
  "lodash": ">=4.18.1"
84
84
  },
85
85
  "name": "@codyswann/lisa",
86
- "version": "2.122.0",
86
+ "version": "2.123.0",
87
87
  "description": "Claude Code governance framework that applies guardrails, guidance, and automated enforcement to projects",
88
88
  "main": "dist/index.js",
89
89
  "exports": {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.122.0",
3
+ "version": "2.123.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.122.0",
3
+ "version": "2.123.0",
4
4
  "description": "Universal governance: agents, skills, commands, hooks, and rules for all projects.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.122.0",
3
+ "version": "2.123.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.122.0",
3
+ "version": "2.123.0",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.122.0",
3
+ "version": "2.123.0",
4
4
  "description": "AWS CDK-specific Lisa plugin.",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.122.0",
3
+ "version": "2.123.0",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.122.0",
3
+ "version": "2.123.0",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-cdk",
3
- "version": "2.122.0",
3
+ "version": "2.123.0",
4
4
  "description": "AWS CDK-specific plugin",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.122.0",
3
+ "version": "2.123.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa",
3
- "version": "2.122.0",
3
+ "version": "2.123.0",
4
4
  "description": "Universal governance — agents, skills, commands, hooks, and rules for all projects",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.122.0",
3
+ "version": "2.123.0",
4
4
  "description": "Expo/React Native-specific skills, agents, rules, and MCP servers",
5
5
  "author": {
6
6
  "name": "Cody Swann"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lisa-expo",
3
- "version": "2.122.0",
3
+ "version": "2.123.0",
4
4
  "description": "Expo and React Native-specific skills, agents, rules, and MCP servers.",
5
5
  "author": {
6
6
  "name": "Cody Swann"