From 3ae16d95340985918644d937326e669885e017f6 Mon Sep 17 00:00:00 2001 From: Koen Vlaswinkel Date: Mon, 3 Apr 2023 14:46:30 +0200 Subject: [PATCH 1/3] Add story for MethodRow --- .../MethodRow.stories.tsx | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 extensions/ql-vscode/src/stories/data-extensions-editor/MethodRow.stories.tsx diff --git a/extensions/ql-vscode/src/stories/data-extensions-editor/MethodRow.stories.tsx b/extensions/ql-vscode/src/stories/data-extensions-editor/MethodRow.stories.tsx new file mode 100644 index 000000000..9b87dc358 --- /dev/null +++ b/extensions/ql-vscode/src/stories/data-extensions-editor/MethodRow.stories.tsx @@ -0,0 +1,54 @@ +import * as React from "react"; + +import { ComponentMeta, ComponentStory } from "@storybook/react"; + +import { MethodRow as MethodRowComponent } from "../../view/data-extensions-editor/MethodRow"; + +export default { + title: "Data Extensions Editor/Method Row", + component: MethodRowComponent, +} as ComponentMeta; + +const Template: ComponentStory = (args) => ( + +); + +export const MethodRow = Template.bind({}); +MethodRow.args = { + externalApiUsage: { + signature: "org.sql2o.Sql2o#open()", + packageName: "org.sql2o", + typeName: "Sql2o", + methodName: "open", + methodParameters: "()", + supported: true, + usages: [ + { + label: "open(...)", + url: { + uri: "file:/home/runner/work/sql2o-example/sql2o-example/src/main/java/org/example/HelloController.java", + startLine: 14, + startColumn: 24, + endLine: 14, + endColumn: 35, + }, + }, + { + label: "open(...)", + url: { + uri: "file:/home/runner/work/sql2o-example/sql2o-example/src/main/java/org/example/HelloController.java", + startLine: 25, + startColumn: 24, + endLine: 25, + endColumn: 35, + }, + }, + ], + }, + modeledMethod: { + type: "summary", + input: "Argument[-1]", + output: "ReturnValue", + kind: "taint", + }, +}; From 1bcc13af7c97b8549438a5168effe8ffec0e8f88 Mon Sep 17 00:00:00 2001 From: Koen Vlaswinkel Date: Mon, 3 Apr 2023 16:30:37 +0200 Subject: [PATCH 2/3] Add story for DataExtensionsEditor --- .../DataExtensionsEditor.stories.tsx | 223 ++++++++++++++++++ .../DataExtensionsEditor.tsx | 14 +- 2 files changed, 234 insertions(+), 3 deletions(-) create mode 100644 extensions/ql-vscode/src/stories/data-extensions-editor/DataExtensionsEditor.stories.tsx diff --git a/extensions/ql-vscode/src/stories/data-extensions-editor/DataExtensionsEditor.stories.tsx b/extensions/ql-vscode/src/stories/data-extensions-editor/DataExtensionsEditor.stories.tsx new file mode 100644 index 000000000..2964827ba --- /dev/null +++ b/extensions/ql-vscode/src/stories/data-extensions-editor/DataExtensionsEditor.stories.tsx @@ -0,0 +1,223 @@ +import * as React from "react"; + +import { ComponentMeta, ComponentStory } from "@storybook/react"; + +import { DataExtensionsEditor as DataExtensionsEditorComponent } from "../../view/data-extensions-editor/DataExtensionsEditor"; + +export default { + title: "Data Extensions Editor/Data Extensions Editor", + component: DataExtensionsEditorComponent, +} as ComponentMeta; + +const Template: ComponentStory = ( + args, +) => ; + +export const DataExtensionsEditor = Template.bind({}); +DataExtensionsEditor.args = { + initialExternalApiUsages: [ + { + signature: "org.sql2o.Connection#createQuery(String)", + packageName: "org.sql2o", + typeName: "Connection", + methodName: "createQuery", + methodParameters: "(String)", + supported: true, + usages: [ + { + label: "createQuery(...)", + url: { + uri: "file:/home/runner/work/sql2o-example/sql2o-example/src/main/java/org/example/HelloController.java", + startLine: 15, + startColumn: 13, + endLine: 15, + endColumn: 56, + }, + }, + { + label: "createQuery(...)", + url: { + uri: "file:/home/runner/work/sql2o-example/sql2o-example/src/main/java/org/example/HelloController.java", + startLine: 26, + startColumn: 13, + endLine: 26, + endColumn: 39, + }, + }, + ], + }, + { + signature: "org.sql2o.Query#executeScalar(Class)", + packageName: "org.sql2o", + typeName: "Query", + methodName: "executeScalar", + methodParameters: "(Class)", + supported: true, + usages: [ + { + label: "executeScalar(...)", + url: { + uri: "file:/home/runner/work/sql2o-example/sql2o-example/src/main/java/org/example/HelloController.java", + startLine: 15, + startColumn: 13, + endLine: 15, + endColumn: 85, + }, + }, + { + label: "executeScalar(...)", + url: { + uri: "file:/home/runner/work/sql2o-example/sql2o-example/src/main/java/org/example/HelloController.java", + startLine: 26, + startColumn: 13, + endLine: 26, + endColumn: 68, + }, + }, + ], + }, + { + signature: "org.sql2o.Sql2o#open()", + packageName: "org.sql2o", + typeName: "Sql2o", + methodName: "open", + methodParameters: "()", + supported: false, + usages: [ + { + label: "open(...)", + url: { + uri: "file:/home/runner/work/sql2o-example/sql2o-example/src/main/java/org/example/HelloController.java", + startLine: 14, + startColumn: 24, + endLine: 14, + endColumn: 35, + }, + }, + { + label: "open(...)", + url: { + uri: "file:/home/runner/work/sql2o-example/sql2o-example/src/main/java/org/example/HelloController.java", + startLine: 25, + startColumn: 24, + endLine: 25, + endColumn: 35, + }, + }, + ], + }, + { + signature: "java.io.PrintStream#println(String)", + packageName: "java.io", + typeName: "PrintStream", + methodName: "println", + methodParameters: "(String)", + supported: true, + usages: [ + { + label: "println(...)", + url: { + uri: "file:/home/runner/work/sql2o-example/sql2o-example/src/main/java/org/example/HelloController.java", + startLine: 29, + startColumn: 9, + endLine: 29, + endColumn: 49, + }, + }, + ], + }, + { + signature: + "org.springframework.boot.SpringApplication#run(Class,String[])", + packageName: "org.springframework.boot", + typeName: "SpringApplication", + methodName: "run", + methodParameters: "(Class,String[])", + supported: false, + usages: [ + { + label: "run(...)", + url: { + uri: "file:/home/runner/work/sql2o-example/sql2o-example/src/main/java/org/example/Sql2oExampleApplication.java", + startLine: 9, + startColumn: 9, + endLine: 9, + endColumn: 66, + }, + }, + ], + }, + { + signature: "org.sql2o.Sql2o#Sql2o(String,String,String)", + packageName: "org.sql2o", + typeName: "Sql2o", + methodName: "Sql2o", + methodParameters: "(String,String,String)", + supported: false, + usages: [ + { + label: "new Sql2o(...)", + url: { + uri: "file:/home/runner/work/sql2o-example/sql2o-example/src/main/java/org/example/HelloController.java", + startLine: 10, + startColumn: 33, + endLine: 10, + endColumn: 88, + }, + }, + ], + }, + { + signature: "org.sql2o.Sql2o#Sql2o(String)", + packageName: "org.sql2o", + typeName: "Sql2o", + methodName: "Sql2o", + methodParameters: "(String)", + supported: false, + usages: [ + { + label: "new Sql2o(...)", + url: { + uri: "file:/home/runner/work/sql2o-example/sql2o-example/src/main/java/org/example/HelloController.java", + startLine: 23, + startColumn: 23, + endLine: 23, + endColumn: 36, + }, + }, + ], + }, + ], + initialModeledMethods: { + "org.sql2o.Sql2o#Sql2o(String)": { + type: "sink", + input: "Argument[0]", + output: "", + kind: "jndi-injection", + }, + "org.sql2o.Connection#createQuery(String)": { + type: "summary", + input: "Argument[-1]", + output: "ReturnValue", + kind: "taint", + }, + "org.sql2o.Sql2o#open()": { + type: "summary", + input: "Argument[-1]", + output: "ReturnValue", + kind: "taint", + }, + "org.sql2o.Query#executeScalar(Class)": { + type: "neutral", + input: "", + output: "", + kind: "", + }, + "org.sql2o.Sql2o#Sql2o(String,String,String)": { + type: "neutral", + input: "", + output: "", + kind: "", + }, + }, +}; diff --git a/extensions/ql-vscode/src/view/data-extensions-editor/DataExtensionsEditor.tsx b/extensions/ql-vscode/src/view/data-extensions-editor/DataExtensionsEditor.tsx index 97c6d8994..2e42e6697 100644 --- a/extensions/ql-vscode/src/view/data-extensions-editor/DataExtensionsEditor.tsx +++ b/extensions/ql-vscode/src/view/data-extensions-editor/DataExtensionsEditor.tsx @@ -33,13 +33,21 @@ const ProgressBar = styled.div` background-color: var(--vscode-progressBar-background); `; -export function DataExtensionsEditor(): JSX.Element { +type Props = { + initialExternalApiUsages?: ExternalApiUsage[]; + initialModeledMethods?: Record; +}; + +export function DataExtensionsEditor({ + initialExternalApiUsages = [], + initialModeledMethods = {}, +}: Props): JSX.Element { const [externalApiUsages, setExternalApiUsages] = useState< ExternalApiUsage[] - >([]); + >(initialExternalApiUsages); const [modeledMethods, setModeledMethods] = useState< Record - >({}); + >(initialModeledMethods); const [progress, setProgress] = useState>({ step: 0, maxStep: 0, From bb05220b2c5acd906d9d61ba963aff17c3d9373b Mon Sep 17 00:00:00 2001 From: Koen Vlaswinkel Date: Mon, 3 Apr 2023 16:37:29 +0200 Subject: [PATCH 3/3] Fix Babel compilation error The default Storybook Babel config did not recognize the `public` keyword in our custom errors (e.g. `ExhaustivityCheckingError` and `RedactableError`). To fix this, we can use Storybook's V7 mode to supply a custom Babel config. This fixes the compilation error. See: https://storybook.js.org/docs/react/configure/babel --- extensions/ql-vscode/.babelrc.json | 16 ++++++++++++++++ extensions/ql-vscode/.storybook/main.ts | 3 +++ 2 files changed, 19 insertions(+) create mode 100644 extensions/ql-vscode/.babelrc.json diff --git a/extensions/ql-vscode/.babelrc.json b/extensions/ql-vscode/.babelrc.json new file mode 100644 index 000000000..00ca841a4 --- /dev/null +++ b/extensions/ql-vscode/.babelrc.json @@ -0,0 +1,16 @@ +{ + "sourceType": "unambiguous", + "presets": [ + [ + "@babel/preset-env", + { + "targets": { + "chrome": 100 + } + } + ], + "@babel/preset-typescript", + "@babel/preset-react" + ], + "plugins": [] +} diff --git a/extensions/ql-vscode/.storybook/main.ts b/extensions/ql-vscode/.storybook/main.ts index db997443a..43b16ab27 100644 --- a/extensions/ql-vscode/.storybook/main.ts +++ b/extensions/ql-vscode/.storybook/main.ts @@ -12,6 +12,9 @@ const config: StorybookConfig = { core: { builder: "@storybook/builder-webpack5", }, + features: { + babelModeV7: true, + }, }; module.exports = config;