@codyswann/lisa 4.33.4 → 4.33.5
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.
- package/dist/configs/eslint/expo.d.ts.map +1 -1
- package/dist/configs/eslint/expo.js +4 -7
- package/dist/configs/eslint/expo.js.map +1 -1
- package/dist/configs/eslint/view-gate.d.ts +42 -0
- package/dist/configs/eslint/view-gate.d.ts.map +1 -0
- package/dist/configs/eslint/view-gate.js +110 -0
- package/dist/configs/eslint/view-gate.js.map +1 -0
- package/dist/core/nightly-e2e-guard-behavior-certificate.js +2 -2
- package/dist/core/upstream-evidence-manifest.d.ts.map +1 -1
- package/dist/core/upstream-evidence-manifest.js +18 -7
- package/dist/core/upstream-evidence-manifest.js.map +1 -1
- package/eslint-plugin-component-structure/README.md +85 -2
- package/eslint-plugin-component-structure/__tests__/no-hooks-in-view.test.js +229 -0
- package/eslint-plugin-component-structure/__tests__/no-return-in-view.test.js +185 -0
- package/eslint-plugin-component-structure/__tests__/plugin-index.test.js +8 -1
- package/eslint-plugin-component-structure/index.js +4 -1
- package/eslint-plugin-component-structure/lib/view-file-scope.js +62 -0
- package/eslint-plugin-component-structure/rules/no-hooks-in-view.js +101 -0
- package/eslint-plugin-component-structure/rules/no-return-in-view.js +133 -62
- package/expo/copy-overwrite/eslint.expo.ts +88 -1
- package/package.json +4 -4
- package/plugins/lisa/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-agy/plugin.json +1 -1
- package/plugins/lisa-cdk/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-agy/plugin.json +1 -1
- package/plugins/lisa-cdk-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cdk-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/SKILL.md +80 -24
- package/plugins/lisa-expo/.codex-plugin/skills/container-view-pattern/scripts/validate_component.py +166 -43
- package/plugins/lisa-expo/skills/container-view-pattern/SKILL.md +80 -24
- package/plugins/lisa-expo/skills/container-view-pattern/scripts/validate_component.py +166 -43
- package/plugins/lisa-expo-agy/plugin.json +1 -1
- package/plugins/lisa-expo-agy/skills/container-view-pattern/SKILL.md +80 -24
- package/plugins/lisa-expo-agy/skills/container-view-pattern/scripts/validate_component.py +166 -43
- package/plugins/lisa-expo-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-copilot/skills/container-view-pattern/SKILL.md +80 -24
- package/plugins/lisa-expo-copilot/skills/container-view-pattern/scripts/validate_component.py +166 -43
- package/plugins/lisa-expo-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-expo-cursor/skills/container-view-pattern/SKILL.md +80 -24
- package/plugins/lisa-expo-cursor/skills/container-view-pattern/scripts/validate_component.py +166 -43
- package/plugins/lisa-harper-fabric/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-agy/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-harper-fabric-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-agy/plugin.json +1 -1
- package/plugins/lisa-nestjs-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-nestjs-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-agy/plugin.json +1 -1
- package/plugins/lisa-openclaw-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-openclaw-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-agy/plugin.json +1 -1
- package/plugins/lisa-phaser-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-phaser-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-agy/plugin.json +1 -1
- package/plugins/lisa-rails-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-rails-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-agy/plugin.json +1 -1
- package/plugins/lisa-typescript-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-typescript-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki/.codex-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-agy/plugin.json +1 -1
- package/plugins/lisa-wiki-copilot/.claude-plugin/plugin.json +1 -1
- package/plugins/lisa-wiki-cursor/.claude-plugin/plugin.json +1 -1
- package/plugins/src/expo/skills/container-view-pattern/SKILL.md +80 -24
- package/plugins/src/expo/skills/container-view-pattern/scripts/validate_component.py +166 -43
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"expo.d.ts","sourceRoot":"","sources":["../../../src/configs/eslint/expo.ts"],"names":[],"mappings":"AAwBA,OAAO,EAEL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EAItB,cAAc,EAIf,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"expo.d.ts","sourceRoot":"","sources":["../../../src/configs/eslint/expo.ts"],"names":[],"mappings":"AAwBA,OAAO,EAEL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EAItB,cAAc,EAIf,MAAM,iBAAiB,CAAC;AAIzB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,cAAc,GACf,CAAC;AAwCF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAe3D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,SAAS,MAAM,EAAE,GAC3B,OAAO,QAAQ,EAAE,MAAM,CAAC,SAAS,CAInC;AAuBD;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,EAC5B,eAAe,EACf,cAA+B,EAC/B,UAA8B,EAC9B,UAAe,EACf,SAAc,GACf,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;IACpB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC/B,GAAG,OAAO,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CA4QnC"}
|
|
@@ -22,6 +22,7 @@ import path from "path";
|
|
|
22
22
|
import { fileURLToPath } from "url";
|
|
23
23
|
// Import TypeScript config and utilities
|
|
24
24
|
import { codeOrganization, defaultIgnores, defaultThresholds, getBaseConfigs, getBaseLanguageOptions, getJsFilesOverride, getScriptsFilesOverride, getSharedFilesOverride, getSharedRules, getTestFilesOverride, getTsFilesOverride, getTsTestFilesOverride, } from "./typescript.js";
|
|
25
|
+
import { getViewGateConfigs } from "./view-gate.js";
|
|
25
26
|
// Re-export for downstream configs
|
|
26
27
|
export { defaultIgnores, defaultThresholds, getBaseConfigs, getBaseLanguageOptions, getSharedRules, };
|
|
27
28
|
// Custom plugins — loaded via relative path so they are resolved from the Lisa
|
|
@@ -325,13 +326,9 @@ export function getExpoConfig({ tsconfigRootDir, ignorePatterns = defaultIgnores
|
|
|
325
326
|
"component-structure/single-component-per-file": "error",
|
|
326
327
|
},
|
|
327
328
|
},
|
|
328
|
-
// View
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
rules: {
|
|
332
|
-
"component-structure/no-return-in-view": "error",
|
|
333
|
-
},
|
|
334
|
-
},
|
|
329
|
+
// View gate: no statements, no hooks. See `view-gate.ts` for why it is
|
|
330
|
+
// stated as those two properties and not as "Views are pure functions".
|
|
331
|
+
...getViewGateConfigs(sourceRoot),
|
|
335
332
|
// View memo requirement (excluding UI components)
|
|
336
333
|
{
|
|
337
334
|
files: ["**/*View.tsx", "**/*View.jsx"],
|
|
@@ -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,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,yCAAyC;AACzC,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"expo.js","sourceRoot":"","sources":["../../../src/configs/eslint/expo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The View half of the Container/View pattern: no statements, no hooks.
|
|
3
|
+
*
|
|
4
|
+
* Stated as those two properties rather than as "Views are pure functions",
|
|
5
|
+
* which is a guarantee neither rule delivers — `{Date.now()}` and
|
|
6
|
+
* `{Math.random() > 0.5 ? … : …}` sit happily in an expression body. The skill
|
|
7
|
+
* claiming an enforcement it did not have is what let a hook live in a View for
|
|
8
|
+
* years; the fix must not repeat the shape of the defect.
|
|
9
|
+
*
|
|
10
|
+
* Extracted from `expo.ts` so the factory stays under its own `max-lines`
|
|
11
|
+
* threshold, not because a second stack needs it yet.
|
|
12
|
+
* @module configs/eslint/view-gate
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* React's hook named exports, banned from a View's import list.
|
|
16
|
+
*
|
|
17
|
+
* An enumeration is correct HERE and nowhere else: React's hook set is fixed and
|
|
18
|
+
* published, and this is the import-line axis. The call-site axis
|
|
19
|
+
* (`component-structure/no-hooks-in-view`) matches by shape precisely because a
|
|
20
|
+
* project-local custom hook can never appear on a list like this one.
|
|
21
|
+
*/
|
|
22
|
+
export declare const REACT_HOOK_IMPORT_NAMES: string[];
|
|
23
|
+
/** What a developer is told when a View reaches for a hook. */
|
|
24
|
+
export declare const VIEW_HOOK_IMPORT_MESSAGE = "View components must not use hooks. Move the hook into the corresponding Container and pass its result down as a prop.";
|
|
25
|
+
/**
|
|
26
|
+
* The View-scoped config blocks a stack should append.
|
|
27
|
+
*
|
|
28
|
+
* Two blocks, because they have different scopes: the statement gate applies to
|
|
29
|
+
* every View, while the hook gate skips the directories the Container/View
|
|
30
|
+
* pattern's own applicability table marks as outside it.
|
|
31
|
+
*
|
|
32
|
+
* The hook gate itself is two independent axes. `no-hooks-in-view` matches the
|
|
33
|
+
* CALL by shape (`use` + uppercase), so a project-local custom hook is caught
|
|
34
|
+
* where an enumerated name list would miss it; `no-restricted-imports` catches
|
|
35
|
+
* the IMPORT LINE, before a call site exists. Neither subsumes the other: a
|
|
36
|
+
* hook re-exported through a barrel escapes the import patterns, and an import
|
|
37
|
+
* with no call yet escapes the call matcher.
|
|
38
|
+
* @param sourceRoot - Prefix for source-relative globs, e.g. `"src/"`.
|
|
39
|
+
* @returns Flat-config blocks, in the order they must be appended.
|
|
40
|
+
*/
|
|
41
|
+
export declare function getViewGateConfigs(sourceRoot: string): import("eslint").Linter.Config[];
|
|
42
|
+
//# sourceMappingURL=view-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-gate.d.ts","sourceRoot":"","sources":["../../../src/configs/eslint/view-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,UAmBnC,CAAC;AAEF,+DAA+D;AAC/D,eAAO,MAAM,wBAAwB,2HACqF,CAAC;AAE3H;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,GACjB,OAAO,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CA+ClC"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The View half of the Container/View pattern: no statements, no hooks.
|
|
3
|
+
*
|
|
4
|
+
* Stated as those two properties rather than as "Views are pure functions",
|
|
5
|
+
* which is a guarantee neither rule delivers — `{Date.now()}` and
|
|
6
|
+
* `{Math.random() > 0.5 ? … : …}` sit happily in an expression body. The skill
|
|
7
|
+
* claiming an enforcement it did not have is what let a hook live in a View for
|
|
8
|
+
* years; the fix must not repeat the shape of the defect.
|
|
9
|
+
*
|
|
10
|
+
* Extracted from `expo.ts` so the factory stays under its own `max-lines`
|
|
11
|
+
* threshold, not because a second stack needs it yet.
|
|
12
|
+
* @module configs/eslint/view-gate
|
|
13
|
+
*/
|
|
14
|
+
/** The glob pair every View override is keyed on. */
|
|
15
|
+
const VIEW_FILES = ["**/*View.tsx", "**/*View.jsx"];
|
|
16
|
+
/**
|
|
17
|
+
* React's hook named exports, banned from a View's import list.
|
|
18
|
+
*
|
|
19
|
+
* An enumeration is correct HERE and nowhere else: React's hook set is fixed and
|
|
20
|
+
* published, and this is the import-line axis. The call-site axis
|
|
21
|
+
* (`component-structure/no-hooks-in-view`) matches by shape precisely because a
|
|
22
|
+
* project-local custom hook can never appear on a list like this one.
|
|
23
|
+
*/
|
|
24
|
+
export const REACT_HOOK_IMPORT_NAMES = [
|
|
25
|
+
"useActionState",
|
|
26
|
+
"useCallback",
|
|
27
|
+
"useContext",
|
|
28
|
+
"useDebugValue",
|
|
29
|
+
"useDeferredValue",
|
|
30
|
+
"useEffect",
|
|
31
|
+
"useEffectEvent",
|
|
32
|
+
"useId",
|
|
33
|
+
"useImperativeHandle",
|
|
34
|
+
"useInsertionEffect",
|
|
35
|
+
"useLayoutEffect",
|
|
36
|
+
"useMemo",
|
|
37
|
+
"useOptimistic",
|
|
38
|
+
"useReducer",
|
|
39
|
+
"useRef",
|
|
40
|
+
"useState",
|
|
41
|
+
"useSyncExternalStore",
|
|
42
|
+
"useTransition",
|
|
43
|
+
];
|
|
44
|
+
/** What a developer is told when a View reaches for a hook. */
|
|
45
|
+
export const VIEW_HOOK_IMPORT_MESSAGE = "View components must not use hooks. Move the hook into the corresponding Container and pass its result down as a prop.";
|
|
46
|
+
/**
|
|
47
|
+
* The View-scoped config blocks a stack should append.
|
|
48
|
+
*
|
|
49
|
+
* Two blocks, because they have different scopes: the statement gate applies to
|
|
50
|
+
* every View, while the hook gate skips the directories the Container/View
|
|
51
|
+
* pattern's own applicability table marks as outside it.
|
|
52
|
+
*
|
|
53
|
+
* The hook gate itself is two independent axes. `no-hooks-in-view` matches the
|
|
54
|
+
* CALL by shape (`use` + uppercase), so a project-local custom hook is caught
|
|
55
|
+
* where an enumerated name list would miss it; `no-restricted-imports` catches
|
|
56
|
+
* the IMPORT LINE, before a call site exists. Neither subsumes the other: a
|
|
57
|
+
* hook re-exported through a barrel escapes the import patterns, and an import
|
|
58
|
+
* with no call yet escapes the call matcher.
|
|
59
|
+
* @param sourceRoot - Prefix for source-relative globs, e.g. `"src/"`.
|
|
60
|
+
* @returns Flat-config blocks, in the order they must be appended.
|
|
61
|
+
*/
|
|
62
|
+
export function getViewGateConfigs(sourceRoot) {
|
|
63
|
+
return [
|
|
64
|
+
{
|
|
65
|
+
files: VIEW_FILES,
|
|
66
|
+
rules: {
|
|
67
|
+
"component-structure/no-return-in-view": "error",
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
files: VIEW_FILES,
|
|
72
|
+
ignores: [
|
|
73
|
+
`${sourceRoot}components/ui/**`,
|
|
74
|
+
`${sourceRoot}components/shared/**`,
|
|
75
|
+
`${sourceRoot}components/icons/**`,
|
|
76
|
+
],
|
|
77
|
+
rules: {
|
|
78
|
+
"component-structure/no-hooks-in-view": "error",
|
|
79
|
+
"no-restricted-imports": [
|
|
80
|
+
"error",
|
|
81
|
+
{
|
|
82
|
+
paths: [
|
|
83
|
+
{
|
|
84
|
+
name: "react",
|
|
85
|
+
importNames: REACT_HOOK_IMPORT_NAMES,
|
|
86
|
+
message: VIEW_HOOK_IMPORT_MESSAGE,
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
patterns: [
|
|
90
|
+
// Objects, not a mix: `no-restricted-imports` accepts an array of
|
|
91
|
+
// strings OR an array of objects, never both, and a mixed array
|
|
92
|
+
// is a schema error that disables the whole override.
|
|
93
|
+
//
|
|
94
|
+
// `@/features/*/*` is the base config's restriction, carried
|
|
95
|
+
// forward because a flat-config override replaces a rule's
|
|
96
|
+
// options wholesale — omitting it would silently delete the
|
|
97
|
+
// shared restriction for every View in the project.
|
|
98
|
+
{ group: ["@/features/*/*"] },
|
|
99
|
+
{
|
|
100
|
+
group: ["**/hooks/**", "@/hooks/**", "~/hooks/**"],
|
|
101
|
+
message: VIEW_HOOK_IMPORT_MESSAGE,
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
},
|
|
107
|
+
},
|
|
108
|
+
];
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=view-gate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"view-gate.js","sourceRoot":"","sources":["../../../src/configs/eslint/view-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,qDAAqD;AACrD,MAAM,UAAU,GAAG,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG;IACrC,gBAAgB;IAChB,aAAa;IACb,YAAY;IACZ,eAAe;IACf,kBAAkB;IAClB,WAAW;IACX,gBAAgB;IAChB,OAAO;IACP,qBAAqB;IACrB,oBAAoB;IACpB,iBAAiB;IACjB,SAAS;IACT,eAAe;IACf,YAAY;IACZ,QAAQ;IACR,UAAU;IACV,sBAAsB;IACtB,eAAe;CAChB,CAAC;AAEF,+DAA+D;AAC/D,MAAM,CAAC,MAAM,wBAAwB,GACnC,wHAAwH,CAAC;AAE3H;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAAkB;IAElB,OAAO;QACL;YACE,KAAK,EAAE,UAAU;YACjB,KAAK,EAAE;gBACL,uCAAuC,EAAE,OAAO;aACjD;SACF;QACD;YACE,KAAK,EAAE,UAAU;YACjB,OAAO,EAAE;gBACP,GAAG,UAAU,kBAAkB;gBAC/B,GAAG,UAAU,sBAAsB;gBACnC,GAAG,UAAU,qBAAqB;aACnC;YACD,KAAK,EAAE;gBACL,sCAAsC,EAAE,OAAO;gBAC/C,uBAAuB,EAAE;oBACvB,OAAO;oBACP;wBACE,KAAK,EAAE;4BACL;gCACE,IAAI,EAAE,OAAO;gCACb,WAAW,EAAE,uBAAuB;gCACpC,OAAO,EAAE,wBAAwB;6BAClC;yBACF;wBACD,QAAQ,EAAE;4BACR,kEAAkE;4BAClE,gEAAgE;4BAChE,sDAAsD;4BACtD,EAAE;4BACF,6DAA6D;4BAC7D,2DAA2D;4BAC3D,4DAA4D;4BAC5D,oDAAoD;4BACpD,EAAE,KAAK,EAAE,CAAC,gBAAgB,CAAC,EAAE;4BAC7B;gCACE,KAAK,EAAE,CAAC,aAAa,EAAE,YAAY,EAAE,YAAY,CAAC;gCAClD,OAAO,EAAE,wBAAwB;6BAClC;yBACF;qBACF;iBACF;aACF;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -20,9 +20,9 @@ export const NIGHTLY_E2E_GUARD_BEHAVIOR_CERTIFICATES = Object.freeze({
|
|
|
20
20
|
}),
|
|
21
21
|
"312e8962e21be2f3c6c6c0235b0c6159b8dc39425508b4965c7df87fb1333380": Object.freeze({
|
|
22
22
|
contractVersion: "1.9.0",
|
|
23
|
-
packageVersions: Object.freeze(["4.33.
|
|
23
|
+
packageVersions: Object.freeze(["4.33.5"]),
|
|
24
24
|
provenances: Object.freeze([
|
|
25
|
-
"workspace package @codyswann/lisa@4.33.
|
|
25
|
+
"workspace package @codyswann/lisa@4.33.5 (typescript/copy-overwrite/scripts/check-nightly-e2e-health.mjs)",
|
|
26
26
|
]),
|
|
27
27
|
}),
|
|
28
28
|
"898ee0247806c7aa6e98328662d80bcff22ff067999298865462a58daef8bb22": Object.freeze({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upstream-evidence-manifest.d.ts","sourceRoot":"","sources":["../../src/core/upstream-evidence-manifest.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"upstream-evidence-manifest.d.ts","sourceRoot":"","sources":["../../src/core/upstream-evidence-manifest.ts"],"names":[],"mappings":"AACA,iFAAiF;AACjF,eAAO,MAAM,0BAA0B,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CA4/EpE,CAAC;AAEL,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAklQjE,CAAC;AAEL,sFAAsF;AACtF,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAk6I/D,CAAC"}
|
|
@@ -74,15 +74,19 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
74
74
|
"eslint-plugin-code-organization/index.js": "9be5ecb135bc30cf39a3371825e94f8a379d8339653297bd7e48c07624923c83",
|
|
75
75
|
"eslint-plugin-code-organization/package.json": "98ddbb102c1ab145130b90f8bbc1cf274decf58ff85fa4c0993fdaf2c71bb1eb",
|
|
76
76
|
"eslint-plugin-code-organization/rules/enforce-statement-order.js": "b3b8365818395430bc40fa839e5c7d8d4510bb88109a1a9f48c35d267425ceb6",
|
|
77
|
-
"eslint-plugin-component-structure/README.md": "
|
|
77
|
+
"eslint-plugin-component-structure/README.md": "7c4a6bddb07d36816bcecfa6213d5b55fc2df0169dc54b3370115e6d12c45234",
|
|
78
78
|
"eslint-plugin-component-structure/__tests__/enforce-component-structure.test.js": "f507216be4bf630563e28010a40cb99e6a5756c3b6f5b83647775fd1ab4f33ea",
|
|
79
|
-
"eslint-plugin-component-structure/__tests__/
|
|
79
|
+
"eslint-plugin-component-structure/__tests__/no-hooks-in-view.test.js": "f9e955f91821be459c9670037d82abb030009a8fe243d5505a14c5b6d5ccae46",
|
|
80
|
+
"eslint-plugin-component-structure/__tests__/no-return-in-view.test.js": "7776eadc79d2c5b8214f9f6c4e62a215362444ad16f8e9b078ca6dd94c8f0cac",
|
|
81
|
+
"eslint-plugin-component-structure/__tests__/plugin-index.test.js": "26494d453552a49ae1ca720515ff3aa68a1a050c851c190d0052a87f34a41a9a",
|
|
80
82
|
"eslint-plugin-component-structure/__tests__/require-memo-in-view.test.js": "98ea09d5e018989b1bdc8ebc6e13557f46d407209d1d631aa6ee7c034e227c51",
|
|
81
83
|
"eslint-plugin-component-structure/__tests__/single-component-per-file.test.js": "8c6ab28190557284d78175d397238c9e896f40c9e1e3f3e02e5b74a81460df6e",
|
|
82
|
-
"eslint-plugin-component-structure/index.js": "
|
|
84
|
+
"eslint-plugin-component-structure/index.js": "d7a59cd26c6065584dc85a6e3c25f5e1e36c883abdb64083f4f9c40dd6106e2c",
|
|
85
|
+
"eslint-plugin-component-structure/lib/view-file-scope.js": "d24c4477ebba4a815344a655e932657b695ac06489f3f7f742ba2b6c137b15ec",
|
|
83
86
|
"eslint-plugin-component-structure/package.json": "99d0173760de800fd83d4f781f0a7817d148a714b8d34aaff7b3c636490adcdd",
|
|
84
87
|
"eslint-plugin-component-structure/rules/enforce-component-structure.js": "0f2c8118534c5602fda6d8637c3a6e3c2f33cd2a753e84b9d4ac92300997df81",
|
|
85
|
-
"eslint-plugin-component-structure/rules/no-
|
|
88
|
+
"eslint-plugin-component-structure/rules/no-hooks-in-view.js": "ccfb45a61873eff6c2fe112634fc5cb010c54665cd89ff6026405be2dbb90e82",
|
|
89
|
+
"eslint-plugin-component-structure/rules/no-return-in-view.js": "8a8328fe7dca562a4408be11029334bbd93a71a978704fd7a26754d32b0e98d7",
|
|
86
90
|
"eslint-plugin-component-structure/rules/require-memo-in-view.js": "d4e5dff390fbe853c7e24890082bb19008c62959bb3920fc35f728973974a1e6",
|
|
87
91
|
"eslint-plugin-component-structure/rules/single-component-per-file.js": "74e6049fdadc38032828f6aaf0b740ef6d4a730a858e8a5d9c85c15e533d2d18",
|
|
88
92
|
"eslint-plugin-phaser/README.md": "0fbb3bbc73bc7bc1a0e832610b4451dbfad9f8884b223e3b55c394fd38afead8",
|
|
@@ -99,7 +103,7 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
99
103
|
"eslint-plugin-ui-standards/rules/no-unbound-design-value.js": "838d6a46741d5c47398383a2b0366a62d3b408ffb126b695c110d77041c0e43b",
|
|
100
104
|
"expo/copy-overwrite/.easignore.extra": "1d30dac09405c41e23f6212553abacea478d7759b69c18edac0c0053f00e0d37",
|
|
101
105
|
"expo/copy-overwrite/eslint.config.ts": "bb02718e1a809151c282d5fc54a1b570fe1cc86236dc1e5f2bcb570b06a22baa",
|
|
102
|
-
"expo/copy-overwrite/eslint.expo.ts": "
|
|
106
|
+
"expo/copy-overwrite/eslint.expo.ts": "9fa4e74810370bcb89d833774ebbf6193bb5d3e166c5efd9b7273f9506277137",
|
|
103
107
|
"expo/copy-overwrite/eslint.slow.config.ts": "48d6a35be75450becde07d30d859c970c48a0438e730845272629c8ec677d3eb",
|
|
104
108
|
"expo/copy-overwrite/jest.config.ts": "b58454a9cf55cf5c1449457fe8eae8390471c57787bdee05b5e34710aa89950a",
|
|
105
109
|
"expo/copy-overwrite/jest.expo.ts": "e6d7dffc4c83fccc02e0b2d2a52e10de30c8c00a12de44184e960bd6155edcd6",
|
|
@@ -776,11 +780,11 @@ export const UPSTREAM_EVIDENCE_MANIFEST = Object.freeze({
|
|
|
776
780
|
"plugins/src/expo/skills/building-native-ui/references/visual-effects.md": "2c1dfd5438f27e4c15bc09ececc57810a58a13e633dc782caac93f8f52cadadf",
|
|
777
781
|
"plugins/src/expo/skills/building-native-ui/references/webgpu-three.md": "a92110c79f7c2f44513aa157a92f58345336615db3ff5e91a487ec3f2bb2c3cf",
|
|
778
782
|
"plugins/src/expo/skills/building-native-ui/references/zoom-transitions.md": "cacc1665e9f3044762765d2cd55fd1ead9627f06478f12dfa2280c6f9ae88ede",
|
|
779
|
-
"plugins/src/expo/skills/container-view-pattern/SKILL.md": "
|
|
783
|
+
"plugins/src/expo/skills/container-view-pattern/SKILL.md": "859a987f8c4b21106a7de3d35b5cb67837f2f07a84656a153086d6220e4a8ff1",
|
|
780
784
|
"plugins/src/expo/skills/container-view-pattern/references/examples.md": "c413acf59eafb65fc5aced87c209662407861af6b724b0fb51e3a87cf8ca2a68",
|
|
781
785
|
"plugins/src/expo/skills/container-view-pattern/references/patterns.md": "fcc25ea059803ac8d5e32ad805c541723ecd4a3c757adb67e4c0949d21a5b6ed",
|
|
782
786
|
"plugins/src/expo/skills/container-view-pattern/scripts/create_component.py": "8226347d191f0e5e688b7862594c197c7697fa8c70ea50756195d13dde1bcb20",
|
|
783
|
-
"plugins/src/expo/skills/container-view-pattern/scripts/validate_component.py": "
|
|
787
|
+
"plugins/src/expo/skills/container-view-pattern/scripts/validate_component.py": "90974c9292fa104334e5ec724d24171fc22c36c0ced37c72b2026c1febef0656",
|
|
784
788
|
"plugins/src/expo/skills/cross-platform-compatibility/SKILL.md": "0cb7dec9036ff2f092e943223b837086ecbb1440a065334b9d645d5f56c491f9",
|
|
785
789
|
"plugins/src/expo/skills/cross-platform-compatibility/references/common-issues.md": "a9109582351155f3a2415fe77b417cec9e8e12d5d1860e68d87ab80198e01f45",
|
|
786
790
|
"plugins/src/expo/skills/cross-platform-compatibility/references/file-extensions.md": "cc8e5c4fcdbbb1a501272f29e77248d31d5cc6500b34db025551c9d7840dd5ea",
|
|
@@ -1546,12 +1550,16 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
1546
1550
|
"eslint-plugin-code-organization/rules/enforce-statement-order.js": true,
|
|
1547
1551
|
"eslint-plugin-component-structure/README.md": true,
|
|
1548
1552
|
"eslint-plugin-component-structure/__tests__/enforce-component-structure.test.js": true,
|
|
1553
|
+
"eslint-plugin-component-structure/__tests__/no-hooks-in-view.test.js": true,
|
|
1554
|
+
"eslint-plugin-component-structure/__tests__/no-return-in-view.test.js": true,
|
|
1549
1555
|
"eslint-plugin-component-structure/__tests__/plugin-index.test.js": true,
|
|
1550
1556
|
"eslint-plugin-component-structure/__tests__/require-memo-in-view.test.js": true,
|
|
1551
1557
|
"eslint-plugin-component-structure/__tests__/single-component-per-file.test.js": true,
|
|
1552
1558
|
"eslint-plugin-component-structure/index.js": true,
|
|
1559
|
+
"eslint-plugin-component-structure/lib/view-file-scope.js": true,
|
|
1553
1560
|
"eslint-plugin-component-structure/package.json": true,
|
|
1554
1561
|
"eslint-plugin-component-structure/rules/enforce-component-structure.js": true,
|
|
1562
|
+
"eslint-plugin-component-structure/rules/no-hooks-in-view.js": true,
|
|
1555
1563
|
"eslint-plugin-component-structure/rules/no-return-in-view.js": true,
|
|
1556
1564
|
"eslint-plugin-component-structure/rules/require-memo-in-view.js": true,
|
|
1557
1565
|
"eslint-plugin-component-structure/rules/single-component-per-file.js": true,
|
|
@@ -7530,6 +7538,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
7530
7538
|
"src/configs/eslint/phaser.ts": true,
|
|
7531
7539
|
"src/configs/eslint/slow.ts": true,
|
|
7532
7540
|
"src/configs/eslint/typescript.ts": true,
|
|
7541
|
+
"src/configs/eslint/view-gate.ts": true,
|
|
7533
7542
|
"src/configs/jest/base.ts": true,
|
|
7534
7543
|
"src/configs/jest/cdk.ts": true,
|
|
7535
7544
|
"src/configs/jest/expo.ts": true,
|
|
@@ -8311,6 +8320,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
8311
8320
|
"tests/unit/config/eslint-test-files-override.test.ts": true,
|
|
8312
8321
|
"tests/unit/config/expo-design-value-arming.test.ts": true,
|
|
8313
8322
|
"tests/unit/config/expo-eslint-local-config.test.ts": true,
|
|
8323
|
+
"tests/unit/config/expo-view-purity-gate.test.ts": true,
|
|
8314
8324
|
"tests/unit/config/fast-xml-parser-security-floor.test.ts": true,
|
|
8315
8325
|
"tests/unit/config/gate-default-tasks-resolve.test.ts": true,
|
|
8316
8326
|
"tests/unit/config/gate-task-shipped-to-templates.test.ts": true,
|
|
@@ -8601,6 +8611,7 @@ export const UPSTREAM_SURFACE_MANIFEST = Object.freeze({
|
|
|
8601
8611
|
"tests/unit/opencode/session-bootstrap-jira-gate.test.ts": true,
|
|
8602
8612
|
"tests/unit/opencode/settings-installer.test.ts": true,
|
|
8603
8613
|
"tests/unit/opencode/skills-installer.test.ts": true,
|
|
8614
|
+
"tests/unit/plugins/container-view-pattern-parity.test.ts": true,
|
|
8604
8615
|
"tests/unit/scripts/ast-grep-enforcement.test.ts": true,
|
|
8605
8616
|
"tests/unit/scripts/bdd-adoption.test.ts": true,
|
|
8606
8617
|
"tests/unit/scripts/bdd-discovery.test.ts": true,
|