Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PoC: type-checked rules #1

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions integration/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
module.exports = {
extends: "../.eslintrc.js",
overrides: [
{
files: ["**/*.ts?(x)"],
rules: {
"@typescript-eslint/no-unsafe-argument": "off",
"@typescript-eslint/no-unsafe-assignment": "off",
"@typescript-eslint/no-unsafe-call": "off",
"@typescript-eslint/no-unsafe-enum-comparison": "off",
"@typescript-eslint/no-unsafe-member-access": "off",
"@typescript-eslint/no-unsafe-return": "off",
},
},
],
};
10 changes: 5 additions & 5 deletions integration/cf-compiler-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@ import glob from "glob";

import { createFixtureProject, js, json } from "./helpers/create-fixture";

const searchFiles = async (pattern: string | RegExp, files: string[]) => {
const searchFiles = (pattern: string | RegExp, files: string[]) => {
let result = shell.grep("-l", pattern, files);
return result.stdout
.trim()
.split("\n")
.filter((line) => line.length > 0);
};

const findCodeFiles = async (directory: string) =>
const findCodeFiles = (directory: string) =>
glob.sync("**/*.@(js|jsx|ts|tsx)", {
cwd: directory,
absolute: true,
Expand Down Expand Up @@ -174,11 +174,11 @@ test.describe("cloudflare compiler", () => {
);
});

test("node externals are not bundled in the browser bundle", async () => {
test("node externals are not bundled in the browser bundle", () => {
let browserBundle = findBrowserBundle(projectDir);
let browserCodeFiles = await findCodeFiles(browserBundle);
let browserCodeFiles = findCodeFiles(browserBundle);

let asyncHooks = await searchFiles(
let asyncHooks = searchFiles(
/async_hooks|AsyncLocalStorage/,
browserCodeFiles
);
Expand Down
40 changes: 15 additions & 25 deletions integration/css-modules-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ test.describe("CSS Modules", () => {
test("basic styles", async ({ page }) => {
let app = new PlaywrightFixture(appFixture, page);
await app.goto("/basic-styles-test");
let locator = await page.locator("[data-testid='basic-styles']");
let locator = page.locator("[data-testid='basic-styles']");
let padding = await locator.evaluate(
(element) => window.getComputedStyle(element).padding
);
Expand Down Expand Up @@ -126,7 +126,7 @@ test.describe("CSS Modules", () => {
test("global selectors", async ({ page }) => {
let app = new PlaywrightFixture(appFixture, page);
await app.goto("/global-selector-test");
let locator = await page.locator("[data-testid='global-selector']");
let locator = page.locator("[data-testid='global-selector']");
let padding = await locator.evaluate(
(element) => window.getComputedStyle(element).padding
);
Expand Down Expand Up @@ -162,7 +162,7 @@ test.describe("CSS Modules", () => {
test("nested global selectors", async ({ page }) => {
let app = new PlaywrightFixture(appFixture, page);
await app.goto("/nested-global-selector-test");
let locator = await page.locator("[data-testid='nested-global-selector']");
let locator = page.locator("[data-testid='nested-global-selector']");
let padding = await locator.evaluate(
(element) => window.getComputedStyle(element).padding
);
Expand Down Expand Up @@ -199,7 +199,7 @@ test.describe("CSS Modules", () => {
test("local class composition", async ({ page }) => {
let app = new PlaywrightFixture(appFixture, page);
await app.goto("/local-class-composition-test");
let locator = await page.locator("[data-testid='local-class-composition']");
let locator = page.locator("[data-testid='local-class-composition']");
let padding = await locator.evaluate(
(element) => window.getComputedStyle(element).padding
);
Expand Down Expand Up @@ -238,9 +238,7 @@ test.describe("CSS Modules", () => {
test("imported class composition", async ({ page }) => {
let app = new PlaywrightFixture(appFixture, page);
await app.goto("/imported-class-composition-test");
let locator = await page.locator(
"[data-testid='imported-class-composition']"
);
let locator = page.locator("[data-testid='imported-class-composition']");
let padding = await locator.evaluate(
(element) => window.getComputedStyle(element).padding
);
Expand Down Expand Up @@ -279,7 +277,7 @@ test.describe("CSS Modules", () => {
test("root relative imported class composition", async ({ page }) => {
let app = new PlaywrightFixture(appFixture, page);
await app.goto("/root-relative-imported-class-composition-test");
let locator = await page.locator(
let locator = page.locator(
"[data-testid='root-relative-imported-class-composition']"
);
let padding = await locator.evaluate(
Expand Down Expand Up @@ -318,9 +316,7 @@ test.describe("CSS Modules", () => {
test("global class composition", async ({ page }) => {
let app = new PlaywrightFixture(appFixture, page);
await app.goto("/global-class-composition-test");
let locator = await page.locator(
"[data-testid='global-class-composition']"
);
let locator = page.locator("[data-testid='global-class-composition']");
let padding = await locator.evaluate(
(element) => window.getComputedStyle(element).padding
);
Expand Down Expand Up @@ -355,7 +351,7 @@ test.describe("CSS Modules", () => {
test("local @value", async ({ page }) => {
let app = new PlaywrightFixture(appFixture, page);
await app.goto("/local-value-test");
let locator = await page.locator("[data-testid='local-value']");
let locator = page.locator("[data-testid='local-value']");
let padding = await locator.evaluate(
(element) => window.getComputedStyle(element).padding
);
Expand Down Expand Up @@ -393,7 +389,7 @@ test.describe("CSS Modules", () => {
test("imported @value", async ({ page }) => {
let app = new PlaywrightFixture(appFixture, page);
await app.goto("/imported-value-test");
let locator = await page.locator("[data-testid='imported-value']");
let locator = page.locator("[data-testid='imported-value']");
let padding = await locator.evaluate(
(element) => window.getComputedStyle(element).padding
);
Expand Down Expand Up @@ -431,9 +427,7 @@ test.describe("CSS Modules", () => {
test("root relative imported @value", async ({ page }) => {
let app = new PlaywrightFixture(appFixture, page);
await app.goto("/root-relative-imported-value-test");
let locator = await page.locator(
"[data-testid='root-relative-imported-value']"
);
let locator = page.locator("[data-testid='root-relative-imported-value']");
let padding = await locator.evaluate(
(element) => window.getComputedStyle(element).padding
);
Expand Down Expand Up @@ -477,7 +471,7 @@ test.describe("CSS Modules", () => {
if (res.url().endsWith(".svg")) imgStatus = res.status();
});
await app.goto("/image-urls-test");
let locator = await page.locator("[data-testid='image-urls']");
let locator = page.locator("[data-testid='image-urls']");
let backgroundImage = await locator.evaluate(
(element) => window.getComputedStyle(element).backgroundImage
);
Expand Down Expand Up @@ -522,9 +516,7 @@ test.describe("CSS Modules", () => {
if (res.url().endsWith(".svg")) imgStatus = res.status();
});
await app.goto("/root-relative-image-urls-test");
let locator = await page.locator(
"[data-testid='root-relative-image-urls']"
);
let locator = page.locator("[data-testid='root-relative-image-urls']");
let backgroundImage = await locator.evaluate(
(element) => window.getComputedStyle(element).backgroundImage
);
Expand Down Expand Up @@ -569,7 +561,7 @@ test.describe("CSS Modules", () => {
if (res.url().endsWith(".svg")) imgStatus = res.status();
});
await app.goto("/absolute-image-urls-test");
let locator = await page.locator("[data-testid='absolute-image-urls']");
let locator = page.locator("[data-testid='absolute-image-urls']");
let backgroundImage = await locator.evaluate(
(element) => window.getComputedStyle(element).backgroundImage
);
Expand Down Expand Up @@ -619,9 +611,7 @@ test.describe("CSS Modules", () => {
test("client entry side effects", async ({ page }) => {
let app = new PlaywrightFixture(appFixture, page);
await app.goto("/client-entry-side-effects-test");
let locator = await page.locator(
"[data-testid='client-entry-side-effects']"
);
let locator = page.locator("[data-testid='client-entry-side-effects']");
let padding = await locator.evaluate(
(element) => window.getComputedStyle(element).padding
);
Expand Down Expand Up @@ -789,7 +779,7 @@ test.describe("CSS Modules", () => {
test("tree shaking of unused component styles", async ({ page }) => {
let app = new PlaywrightFixture(appFixture, page);
await app.goto("/tree-shaking-test");
let locator = await page.locator("[data-testid='tree-shaking']");
let locator = page.locator("[data-testid='tree-shaking']");
let padding = await locator.evaluate(
(element) => window.getComputedStyle(element).padding
);
Expand Down
18 changes: 8 additions & 10 deletions integration/css-side-effect-imports-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ test.describe("CSS side-effect imports", () => {
test("basic side effect", async ({ page }) => {
let app = new PlaywrightFixture(appFixture, page);
await app.goto("/basic-side-effect-test");
let locator = await page.locator("[data-testid='basic-side-effect']");
let locator = page.locator("[data-testid='basic-side-effect']");
let padding = await locator.evaluate(
(element) => window.getComputedStyle(element).padding
);
Expand Down Expand Up @@ -107,7 +107,7 @@ test.describe("CSS side-effect imports", () => {
test("root relative", async ({ page }) => {
let app = new PlaywrightFixture(appFixture, page);
await app.goto("/root-relative-test");
let locator = await page.locator("[data-testid='root-relative']");
let locator = page.locator("[data-testid='root-relative']");
let padding = await locator.evaluate(
(element) => window.getComputedStyle(element).padding
);
Expand Down Expand Up @@ -146,7 +146,7 @@ test.describe("CSS side-effect imports", () => {
if (res.url().endsWith(".svg")) imgStatus = res.status();
});
await app.goto("/image-urls-test");
let locator = await page.locator("[data-testid='image-urls']");
let locator = page.locator("[data-testid='image-urls']");
let backgroundImage = await locator.evaluate(
(element) => window.getComputedStyle(element).backgroundImage
);
Expand Down Expand Up @@ -186,9 +186,7 @@ test.describe("CSS side-effect imports", () => {
if (res.url().endsWith(".svg")) imgStatus = res.status();
});
await app.goto("/root-relative-image-urls-test");
let locator = await page.locator(
"[data-testid='root-relative-image-urls']"
);
let locator = page.locator("[data-testid='root-relative-image-urls']");
let backgroundImage = await locator.evaluate(
(element) => window.getComputedStyle(element).backgroundImage
);
Expand Down Expand Up @@ -228,7 +226,7 @@ test.describe("CSS side-effect imports", () => {
if (res.url().endsWith(".svg")) imgStatus = res.status();
});
await app.goto("/absolute-image-urls-test");
let locator = await page.locator("[data-testid='absolute-image-urls']");
let locator = page.locator("[data-testid='absolute-image-urls']");
let backgroundImage = await locator.evaluate(
(element) => window.getComputedStyle(element).backgroundImage
);
Expand Down Expand Up @@ -258,7 +256,7 @@ test.describe("CSS side-effect imports", () => {
test("JSX in JS file", async ({ page }) => {
let app = new PlaywrightFixture(appFixture, page);
await app.goto("/jsx-in-js-file-test");
let locator = await page.locator("[data-testid='jsx-in-js-file']");
let locator = page.locator("[data-testid='jsx-in-js-file']");
let padding = await locator.evaluate(
(element) => window.getComputedStyle(element).padding
);
Expand Down Expand Up @@ -297,7 +295,7 @@ test.describe("CSS side-effect imports", () => {
test("CommonJS package", async ({ page }) => {
let app = new PlaywrightFixture(appFixture, page);
await app.goto("/commonjs-package-test");
let locator = await page.locator("[data-testid='commonjs-package']");
let locator = page.locator("[data-testid='commonjs-package']");
let padding = await locator.evaluate(
(element) => window.getComputedStyle(element).padding
);
Expand Down Expand Up @@ -339,7 +337,7 @@ test.describe("CSS side-effect imports", () => {
test("ESM package", async ({ page }) => {
let app = new PlaywrightFixture(appFixture, page);
await app.goto("/esm-package-test");
let locator = await page.locator("[data-testid='esm-package']");
let locator = page.locator("[data-testid='esm-package']");
let padding = await locator.evaluate(
(element) => window.getComputedStyle(element).padding
);
Expand Down
2 changes: 1 addition & 1 deletion integration/defer-loader-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ test.beforeAll(async () => {
appFixture = await createAppFixture(fixture);
});

test.afterAll(async () => appFixture.close());
test.afterAll(() => appFixture.close());

test("deferred response can redirect on document request", async ({ page }) => {
let app = new PlaywrightFixture(appFixture, page);
Expand Down
9 changes: 6 additions & 3 deletions integration/defer-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ declare global {
test.beforeEach(async ({ context }) => {
await context.route(/_data/, async (route) => {
await new Promise((resolve) => setTimeout(resolve, 50));
route.continue();
// TODO: Should this be awaited?
void route.continue();
});
});

Expand Down Expand Up @@ -789,7 +790,8 @@ test.describe("non-aborted", () => {
}) => {
let app = new PlaywrightFixture(appFixture, page);
let assertConsole = monitorConsole(page);
app.goto("/deferred-manual-resolve");
// TODO: Should this be awaited?
void app.goto("/deferred-manual-resolve");

await page.waitForSelector(`#${ROOT_ID}`);
await page.waitForSelector(`#${DEFERRED_ID}`);
Expand Down Expand Up @@ -892,7 +894,8 @@ test.describe("non-aborted", () => {
await ensureInteractivity(page, ROOT_ID);
await ensureInteractivity(page, INDEX_ID);

app.clickLink("/deferred-script-rejected");
// TODO: Should this be awaited?
void app.clickLink("/deferred-script-rejected");

await ensureInteractivity(page, DEFERRED_ID);
await ensureInteractivity(page, ERROR_ID);
Expand Down
33 changes: 15 additions & 18 deletions integration/deno-compiler-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ const importPattern = (importSpecifier: string) =>
String.raw`import\s*{.*}\s*from\s*"` + importSpecifier + String.raw`"`
);

const findCodeFiles = async (directory: string) =>
const findCodeFiles = (directory: string) =>
glob.sync("**/*.@(js|jsx|ts|tsx)", {
cwd: directory,
absolute: true,
});
const searchFiles = async (pattern: string | RegExp, files: string[]) => {
const searchFiles = (pattern: string | RegExp, files: string[]) => {
let result = shell.grep("-l", pattern, files);
return result.stdout
.trim()
Expand Down Expand Up @@ -154,17 +154,17 @@ test("compiler does not bundle url imports for server", async () => {
);
});

test("compiler does not bundle url imports for browser", async () => {
test("compiler does not bundle url imports for browser", () => {
let browserBundle = findBrowserBundle(projectDir);
let browserCodeFiles = await findCodeFiles(browserBundle);
let browserCodeFiles = findCodeFiles(browserBundle);

let utilFiles = await searchFiles(
let utilFiles = searchFiles(
importPattern("https://deno.land/x/util.ts"),
browserCodeFiles
);
expect(utilFiles.length).toBeGreaterThanOrEqual(1);

let componentFiles = await searchFiles(
let componentFiles = searchFiles(
importPattern("https://deno.land/x/component.ts"),
browserCodeFiles
);
Expand All @@ -174,7 +174,7 @@ test("compiler does not bundle url imports for browser", async () => {
Url imports _could_ have side effects, but the vast majority do not.
Currently Remix marks all URL imports as side-effect free.
*/
let serverOnlyUtilFiles = await searchFiles(
let serverOnlyUtilFiles = searchFiles(
importPattern("https://deno.land/x/server-only.ts"),
browserCodeFiles
);
Expand All @@ -194,32 +194,29 @@ test("compiler bundles npm imports for server", async () => {
expect(serverBundle).toContain("NPM_SERVER_ONLY");
});

test("compiler bundles npm imports for browser", async () => {
test("compiler bundles npm imports for browser", () => {
let browserBundle = findBrowserBundle(projectDir);
let browserCodeFiles = await findCodeFiles(browserBundle);
let browserCodeFiles = findCodeFiles(browserBundle);

let utilImports = await searchFiles(
importPattern("npm-util"),
browserCodeFiles
);
let utilImports = searchFiles(importPattern("npm-util"), browserCodeFiles);
expect(utilImports.length).toBe(0);
let utilFiles = await searchFiles("NPM_UTIL", browserCodeFiles);
let utilFiles = searchFiles("NPM_UTIL", browserCodeFiles);
expect(utilFiles.length).toBeGreaterThanOrEqual(1);

let componentImports = await searchFiles(
let componentImports = searchFiles(
importPattern("npm-component"),
browserCodeFiles
);
expect(componentImports.length).toBe(0);
let componentFiles = await searchFiles("NPM_COMPONENT", browserCodeFiles);
let componentFiles = searchFiles("NPM_COMPONENT", browserCodeFiles);
expect(componentFiles.length).toBeGreaterThanOrEqual(1);

let serverOnlyImports = await searchFiles(
let serverOnlyImports = searchFiles(
importPattern("npm-server-only"),
browserCodeFiles
);
expect(serverOnlyImports.length).toBe(0);
let serverOnlyFiles = await searchFiles("NPM_SERVER_ONLY", browserCodeFiles);
let serverOnlyFiles = searchFiles("NPM_SERVER_ONLY", browserCodeFiles);
expect(serverOnlyFiles.length).toBe(0);
});

Expand Down
Loading
Loading