@amazon-devices/eslint-plugin-kepler 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +7 -0
- package/README.md +71 -0
- package/THIRD_PARTY_NOTICES.txt +4229 -0
- package/dist/formatters/default.js +8 -0
- package/dist/formatters/default.js.LICENSE.txt +1 -0
- package/dist/index.js +1 -0
- package/package.json +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(()=>{"use strict";var e={24:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.getAppManifest=function(){if(p)return p;try{const e=n.readFileSync(a.join(l.PROJECT_DIR_PATH,u),"utf8");p=i.parse(e)}catch(e){return}return p},t.getKeplerESLintPackageJson=function(){return s};var n=c(r(896)),a=c(r(928)),i=c(r(94)),s=c(r(330)),l=r(624);function o(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(o=function(e){return e?r:t})(e)}function c(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=o(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&{}.hasOwnProperty.call(e,i)){var s=a?Object.getOwnPropertyDescriptor(e,i):null;s&&(s.get||s.set)?Object.defineProperty(n,i,s):n[i]=e[i]}return n.default=e,r&&r.set(e,n),n}let p;const u="manifest.toml"},94:e=>{e.exports=require("toml")},272:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DetectSplashScreen=void 0;var n=r(816),a=r(886);const i="usePreventHideSplashScreen",s="useHideSplashScreenCallback";t.DetectSplashScreen={meta:{type:"suggestion",docs:{description:"usePreventHideSplashScreen() should be used to natively render splash screen, for better App launch performance",recommended:!0,category:"Performance"},fixable:"code",schema:[]},create(e){const t=new Set,r=new Set;return{VariableDeclarator(e){(0,a.isFunctionAssignedToVariable)(e,i)||(0,a.isModuleFunctionAssignedToVariable)(e,i)?t.add(e.id.name):((0,a.isFunctionAssignedToVariable)(e,s)||(0,a.isModuleFunctionAssignedToVariable)(e,s))&&r.add(e.id.name)},CallExpression(e){if((0,a.isDirectCall)(e,i)||(0,a.isAliasCall)(e,i,t)||(0,a.isNamespacedCall)(e,i)){const e=n.KeplerESLintPluginStateManager.getInstance().getKeplerESLintState();e.splashScreen.usePreventHideSplashScreenFound=!0,n.KeplerESLintPluginStateManager.getInstance().setKeplerESLintState(e)}else if((0,a.isDirectCall)(e,s)||(0,a.isAliasCall)(e,s,r)||(0,a.isNamespacedCall)(e,s)){const e=n.KeplerESLintPluginStateManager.getInstance().getKeplerESLintState();e.splashScreen.useHideSplashScreenCallbackFound=!0,n.KeplerESLintPluginStateManager.getInstance().setKeplerESLintState(e)}}}}}},330:e=>{e.exports=JSON.parse('{"name":"@amazon-devices/eslint-plugin-kepler","version":"0.1.4","description":"An ESLint Plugin to suggest Kepler App Development best practices","main":"dist/index.js","files":["dist","THIRD_PARTY_NOTICES.txt"],"scripts":{"test":"jest --colors","lint":"eslint src __tests__ --ext .js,.ts,.tsx","lint:fix":"eslint src __tests__ --ext .js,.ts,.tsx --fix","prepare":"npm run build","typeCheck":"tsc --noEmit","bundle":"webpack","build":"npm-run-all lint typeCheck test bundle","format":"prettier --config .prettierrc \'src/**/*.ts\' \'__tests__/**/*.ts\' --write","checkLicenses":"license-checker --production --exclude MIT,Apache-2.0,BSD-2-Clause,BSD-3-Clause,ISC,0BSD,Python-2.0","genAttribution":"generate-attribution -o ./.attr && mv .attr/attribution.txt ./dist/LICENSE-THIRD-PARTY && rm -rf .attr"},"devDependencies":{"@amazon-devices/kepler-telemetry-service-config":"*","@amazon-devices/kepler-telemetry-service-typescript-client":"*","@babel/cli":"^7.26.4","@babel/core":"^7.26.9","@babel/preset-env":"^7.26.9","@babel/preset-typescript":"^7.26.0","@eslint/js":"^8.12.0","@trivago/prettier-plugin-sort-imports":"^5.2.1","@types/eslint":"^8.4.1","@types/jest":"^29.5.14","@types/node":"^22.10.2","@typescript-eslint/eslint-plugin":"^8.18.0","@typescript-eslint/parser":"^8.18.0","@typescript-eslint/types":"^8.18.0","@typescript-eslint/utils":"^8.18.0","babel-loader":"^9.2.1","babel-plugin-transform-remove-console":"^6.9.4","eslint":"^8.12.0","globals":"^15.13.0","husky":"^9.1.7","jest":"^29.7.0","license-checker":"^25.0.1","npm-run-all":"^4.1.5","oss-attribution-generator":"^1.7.1","prettier-plugin-organize-imports":"^4.1.0","ts-jest":"^29.2.5","ts-node":"^10.9.2","typescript":"^5.7.2","typescript-eslint":"^8.18.0","webpack":"^5.98.0","webpack-cli":"^6.0.1"},"dependencies":{"chalk":"^4.1.2","toml":"^3.0.0","uuid":"^11.0.0"},"peerDependencies":{"eslint":">=8.12.0"},"husky":{"hooks":{"pre-commit":"npm run format"}}}')},407:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.CheckSubscription=void 0;const n=`See ${r(624).KEPLER_BEST_PRACTICE_URL}#listeners-event-subscriptions-and-timers for more.`;t.CheckSubscription={meta:{type:"suggestion",docs:{description:"Checks if subscriptions are set to be cleaned up",recommended:!0,category:"Performance"},fixable:"code",schema:[],messages:{failedToKeepSubscription:`Subscription must be kept in variable so that it can be cleaned up on the component is detached. ${n}`,missingCleanUp:`Subscription \`{{varName}}\` is not cleaned up. ${n}`}},create(e){const t=new Set,r=new Set,n=new Set;return{"VariableDeclarator[init.callee.name = /^useAdd(KeplerAppState|UserInput)ListenerCallback$/]":e=>{if("Identifier"===e.id.type){const r=e.id.name;t.add(r)}},"CallExpression[callee.name='useEffect'] :function CallExpression":a=>{if("Identifier"===a.callee.type&&t.has(a.callee.name)){const t=e.sourceCode??e.getSourceCode(),i=t.getAncestors?.(a)??e.getAncestors();if(i.length>=1){const e=i[i.length-1];if("VariableDeclarator"===e.type&&"Identifier"==e.id.type)return void r.add(e.id.name);if("AssignmentExpression"===e.type&&"Identifier"==e.left.type)return void r.add(e.left.name);if("CallExpression"===e.type&&e.arguments[0]===a&&"MemberExpression"===e.callee.type){const t=e.callee;if("Identifier"===t.property.type&&["add","push"].includes(t.property.name)&&"Identifier"===t.object.type)return void n.add(t.object.name)}}e.report({node:a,messageId:"failedToKeepSubscription"})}},"CallExpression[callee.name='useEffect'] :function ReturnStatement CallExpression[callee.property.name='remove']":e=>{if("MemberExpression"===e.callee.type){const t=e.callee;"Identifier"===t.object.type&&r.has(t.object.name)&&r.delete(t.object.name)}},"CallExpression[callee.name='useEffect'] :function ReturnStatement CallExpression[callee.property.name='forEach']":e=>{if("MemberExpression"===e.callee.type){const t=e.callee;"Identifier"===t.object.type&&n.has(t.object.name)&&n.delete(t.object.name)}},"CallExpression[callee.name='useEffect']:exit":t=>{for(const n of r)e.report({node:t,messageId:"missingCleanUp",data:{varName:n}});for(const r of n)e.report({node:t,messageId:"missingCleanUp",data:{varName:r}});r.clear(),n.clear()}}}}},624:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.UNKNOWN=t.PROJECT_DIR_PATH=t.KeplerESLintRuleIds=t.KEPLER_ESLINT_RULE_PREFIX=t.KEPLER_ESLINT_OUTPUT_DIR_PATH=t.KEPLER_DOC_BASE_URL=t.KEPLER_BEST_PRACTICE_URL=t.ICON_WARN=t.ICON_ERROR=t.ESLintRuleSeverity=void 0;var n=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=a(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},i=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&{}.hasOwnProperty.call(e,s)){var l=i?Object.getOwnPropertyDescriptor(e,s):null;l&&(l.get||l.set)?Object.defineProperty(n,s,l):n[s]=e[s]}return n.default=e,r&&r.set(e,n),n}(r(928));function a(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(a=function(e){return e?r:t})(e)}t.KeplerESLintRuleIds=function(e){return e.FlatList="@amazon-devices/kepler/flat-list",e.Animated="@amazon-devices/kepler/animated",e.NoComplexScrollView="@amazon-devices/kepler/no-complex-scroll-view",e.DetectReportFullyDrawn="@amazon-devices/kepler/detect-report-fully-drawn",e.DetectSplashScreen="@amazon-devices/kepler/detect-splash-screen",e}({}),t.ESLintRuleSeverity=function(e){return e[e.OFF=0]="OFF",e[e.WARNING=1]="WARNING",e[e.ERROR=2]="ERROR",e}({});const i=t.PROJECT_DIR_PATH=process.cwd(),s=(t.KEPLER_ESLINT_OUTPUT_DIR_PATH=n.join(i,"generated","eslint-plugin-kepler"),t.ICON_WARN="⚠️",t.ICON_ERROR="❌",t.KEPLER_ESLINT_RULE_PREFIX="@amazon-devices/kepler",t.UNKNOWN="UNKNOWN",t.KEPLER_DOC_BASE_URL="https://developer.amazon.com/docs");t.KEPLER_BEST_PRACTICE_URL=`${s}/kepler/best_practices.html`},723:(e,t,r)=>{var n=r(737),a=r(407),i=r(272),s=r(970),l=r(819),o=r(816),c=r(24);o.KeplerESLintPluginStateManager.getInstance().initialize(),e.exports={meta:{name:(0,c.getKeplerESLintPackageJson)().name,version:(0,c.getKeplerESLintPackageJson)().version,filePatterns:["**/*.jsx","**/*.tsx"]},configs:{performance:{plugins:["@amazon-devices/eslint-plugin-kepler"],rules:{"@amazon-devices/kepler/flat-list":"warn","@amazon-devices/kepler/check-subscription":"warn","@amazon-devices/kepler/animated":"error","@amazon-devices/kepler/detect-report-fully-drawn":"warn","@amazon-devices/kepler/detect-splash-screen":"warn"}}},rules:{"flat-list":l.FlatList,"check-subscription":a.CheckSubscription,animated:n.Animated,"detect-report-fully-drawn":s.DetectUseReportFullyDrawn,"detect-splash-screen":i.DetectSplashScreen}}},737:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Animated=void 0;var n=r(624);const a="useNativeDriver";t.Animated={meta:{type:"suggestion",docs:{description:"Recommends performance optimization configs for 'Animated' component",recommended:!0,category:"Performance"},fixable:"code",schema:[]},create:e=>({CallExpression(t){if("MemberExpression"!==t.callee.type||"Animated"!==t.callee.object.name||"timing"!==t.callee.property.name&&"spring"!==t.callee.property.name&&"decay"!==t.callee.property.name)return;const r=`${t.callee.object.name}.${t.callee.property.name}()`;if(t.arguments.length<2)return;const i=t.arguments[1];if("ObjectExpression"!==i.type)return;const s=i.properties.find((e=>"Property"===e.type&&"Identifier"===e.key.type&&e.key.name===a));s?s&&"Literal"===s.value.type&&!0===s.value.value||e.report({node:t,message:`'${a}' property is set to 'false'. Set ${a} to 'true' to run animations on UI thread for better performance. See ${n.KEPLER_BEST_PRACTICE_URL}#animations for more.`}):e.report({node:t,message:`${r} missing props: '${a}'. Set ${a} to 'true' to run animations on UI thread for better performance. See ${n.KEPLER_BEST_PRACTICE_URL}#animations for more.`})}})}},816:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.KeplerESLintPluginStateManager=void 0;var n=l(r(896)),a=l(r(928)),i=r(624);function s(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(s=function(e){return e?r:t})(e)}function l(e,t){if(!t&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=s(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if("default"!==i&&{}.hasOwnProperty.call(e,i)){var l=a?Object.getOwnPropertyDescriptor(e,i):null;l&&(l.get||l.set)?Object.defineProperty(n,i,l):n[i]=e[i]}return n.default=e,r&&r.set(e,n),n}const o=a.join(i.KEPLER_ESLINT_OUTPUT_DIR_PATH,"keplerESLintState.json");class c{constructor(){this.keplerESLintState={fullyDrawn:{useReportFullyDrawnFound:!1},splashScreen:{usePreventHideSplashScreenFound:!1,useHideSplashScreenCallbackFound:!1}}}static getInstance(){return c.instance||(c.instance=new c),c.instance}initialize(){n.existsSync(i.KEPLER_ESLINT_OUTPUT_DIR_PATH)||n.mkdirSync(i.KEPLER_ESLINT_OUTPUT_DIR_PATH,{recursive:!0}),this.persistKeplerAnalyzerState()}setKeplerESLintState(e){this.keplerESLintState=e,this.persistKeplerAnalyzerState()}getKeplerESLintState(){return this.keplerESLintState}persistKeplerAnalyzerState(){n.writeFileSync(o,JSON.stringify(this.keplerESLintState),"utf8")}static readKeplerESLintState(){let e;try{e=JSON.parse(n.readFileSync(o,"utf8"))}catch(e){console.error(e)}return e}static cleanUpKeplerESLintState(){try{n.rmSync(i.KEPLER_ESLINT_OUTPUT_DIR_PATH)}catch(e){console.error(`Error deleting ${i.KEPLER_ESLINT_OUTPUT_DIR_PATH}`),console.error(e)}}}t.KeplerESLintPluginStateManager=c},819:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.FlatList=void 0;var n=r(624);const a=["initialNumToRender","windowSize","removeClippedSubviews","maxToRenderPerBatch","updateCellsBatchingPeriod"];t.FlatList={meta:{type:"suggestion",docs:{description:"FlatList causes performance overhead and should be used carefully",recommended:!0,category:"Performance"},fixable:"code",schema:[]},create:e=>({JSXOpeningElement(t){if("FlatList"===t.name.name){const r=t.attributes.map((e=>e.name.name)),i=a.filter((e=>!r.includes(e)));i.length>0&&e.report({node:t,message:`FlatList missing props: '${i}'. FlatList performance is not fully unlocked without these props. See ${n.KEPLER_BEST_PRACTICE_URL}#flatlist for more.`})}}})}},886:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.isAliasCall=function(e,t,n){return e.callee.type===r&&n.has(e.callee.name)},t.isDirectCall=function(e,t){return e.callee.type===r&&e.callee.name===t},t.isFunctionAssignedToVariable=function(e,t){return e.init?.type===r&&e.init.name===t&&e.id.type===r},t.isModuleFunctionAssignedToVariable=function(e,t){return e.init?.type===n&&e.init.property.type===r&&e.init.property.name===t&&e.id.type===r},t.isNamespacedCall=function(e,t){return e.callee.type===n&&e.callee.property.type===r&&e.callee.property.name===t};const r="Identifier",n="MemberExpression"},896:e=>{e.exports=require("fs")},928:e=>{e.exports=require("path")},970:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.DetectUseReportFullyDrawn=void 0;var n=r(816),a=r(886);const i="useReportFullyDrawn";t.DetectUseReportFullyDrawn={meta:{type:"suggestion",docs:{description:"useReportFullyDrawn() callback should be used to measure Time to Fully Drawn",recommended:!0,category:"Performance"},fixable:"code",schema:[]},create(e){const t=new Set;return{VariableDeclarator(e){(0,a.isFunctionAssignedToVariable)(e,i)&&t.add(e.id.name),(0,a.isModuleFunctionAssignedToVariable)(e,i)&&t.add(e.id.name)},CallExpression(e){if((0,a.isDirectCall)(e,i)||(0,a.isAliasCall)(e,i,t)||(0,a.isNamespacedCall)(e,i)){const e=n.KeplerESLintPluginStateManager.getInstance().getKeplerESLintState();e.fullyDrawn.useReportFullyDrawnFound=!0,n.KeplerESLintPluginStateManager.getInstance().setKeplerESLintState(e)}}}}}}},t={},r=function r(n){var a=t[n];if(void 0!==a)return a.exports;var i=t[n]={exports:{}};return e[n](i,i.exports,r),i.exports}(723);module.exports=r})();
|
package/package.json
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"name": "@amazon-devices/eslint-plugin-kepler", "version": "0.1.4", "description": "An ESLint Plugin to suggest Kepler App Development best practices", "main": "dist/index.js", "files": ["dist", "THIRD_PARTY_NOTICES.txt"], "scripts": {"test": "jest --colors", "lint": "eslint src __tests__ --ext .js,.ts,.tsx", "lint:fix": "eslint src __tests__ --ext .js,.ts,.tsx --fix", "typeCheck": "tsc --noEmit", "bundle": "webpack", "build": "npm-run-all lint typeCheck test bundle", "format": "prettier --config .prettierrc 'src/**/*.ts' '__tests__/**/*.ts' --write", "checkLicenses": "license-checker --production --exclude MIT,Apache-2.0,BSD-2-Clause,BSD-3-Clause,ISC,0BSD,Python-2.0", "genAttribution": "generate-attribution -o ./.attr && mv .attr/attribution.txt ./dist/LICENSE-THIRD-PARTY && rm -rf .attr"}, "devDependencies": {"@amazon-devices/kepler-telemetry-service-config": "*", "@amazon-devices/kepler-telemetry-service-typescript-client": "*", "@babel/cli": "^7.26.4", "@babel/core": "^7.26.9", "@babel/preset-env": "^7.26.9", "@babel/preset-typescript": "^7.26.0", "@eslint/js": "^8.12.0", "@trivago/prettier-plugin-sort-imports": "^5.2.1", "@types/eslint": "^8.4.1", "@types/jest": "^29.5.14", "@types/node": "^22.10.2", "@typescript-eslint/eslint-plugin": "^8.18.0", "@typescript-eslint/parser": "^8.18.0", "@typescript-eslint/types": "^8.18.0", "@typescript-eslint/utils": "^8.18.0", "babel-loader": "^9.2.1", "babel-plugin-transform-remove-console": "^6.9.4", "eslint": "^8.12.0", "globals": "^15.13.0", "husky": "^9.1.7", "jest": "^29.7.0", "license-checker": "^25.0.1", "npm-run-all": "^4.1.5", "oss-attribution-generator": "^1.7.1", "prettier-plugin-organize-imports": "^4.1.0", "ts-jest": "^29.2.5", "ts-node": "^10.9.2", "typescript": "^5.7.2", "typescript-eslint": "^8.18.0", "webpack": "^5.98.0", "webpack-cli": "^6.0.1"}, "dependencies": {"chalk": "^4.1.2", "toml": "^3.0.0", "uuid": "^11.0.0"}, "peerDependencies": {"eslint": ">=8.12.0"}, "husky": {"hooks": {"pre-commit": "npm run format"}}, "license": "See license in LICENSE"}
|