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

Remove TypeScript #971

Merged
merged 8 commits into from Sep 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
23 changes: 0 additions & 23 deletions .eslintrc

This file was deleted.

42 changes: 42 additions & 0 deletions .eslintrc.js
@@ -0,0 +1,42 @@
module.exports = {
env: {
browser: true,
es2021: true
},
extends: ["eslint:recommended"],
overrides: [
{
env: {
node: true
},
files: [".eslintrc.{js,cjs}"],
parserOptions: {
sourceType: "script"
}
}
],
parserOptions: {
ecmaVersion: "latest",
sourceType: "module"
},
rules: {
"comma-dangle": "error",
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some of these changes seem not relevant to the PR title/subject. Why were these introduced in this PR?

"curly": ["error", "multi-line"],
"getter-return": "off",
"no-console": "off",
"no-duplicate-imports": ["error"],
"no-multi-spaces": ["error", { "exceptions": { "VariableDeclarator": true }}],
"no-multiple-empty-lines": ["error", { "max": 2 }],
"no-self-assign": ["error", { "props": false }],
"no-trailing-spaces": ["error"],
"no-unused-vars": ["error", { argsIgnorePattern: "_*" }],
"no-useless-escape": "off",
"no-var": ["error"],
"prefer-const": ["error"],
"semi": ["error", "never"]
},
globals: {
test: true,
setup: true
}
}
18 changes: 5 additions & 13 deletions package.json
Expand Up @@ -39,39 +39,31 @@
"@playwright/test": "^1.28.0",
"@rollup/plugin-node-resolve": "13.1.3",
"@rollup/plugin-typescript": "^11.0.0",
"@types/multer": "^1.4.5",
"@typescript-eslint/eslint-plugin": "^5.50.0",
"@typescript-eslint/parser": "^5.50.0",
"@web/dev-server-esbuild": "^0.3.3",
"@web/test-runner": "^0.15.0",
"@web/test-runner-playwright": "^0.9.0",
"arg": "^5.0.1",
"body-parser": "^1.20.1",
"chai": "~4.3.4",
"eslint": "^8.13.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-prettier": "^4.0.0",
"express": "^4.18.2",
"multer": "^1.4.2",
"prettier": "2.6.2",
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How come "prettier" was removed in this PR?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is very nice, we dont need it.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why format or type your code just yolo and hope for the best!

"rollup": "^2.35.1",
"ts-node": "^10.9.1",
"tslib": "^2.5.0",
"typescript": "^4.9.5"
"rollup": "^2.35.1"
},
"scripts": {
"clean": "rm -fr dist",
"clean:win": "rmdir /s /q dist",
"build": "tsc --noEmit false --declaration true --emitDeclarationOnly true --outDir dist/types && rollup -c",
"build:win": "tsc --noEmit false --declaration true --emitDeclarationOnly true --outDir dist/types & rollup -c",
"build": "rollup -c",
"build:win": "rollup -c",
"watch": "rollup -wc",
"start": "ts-node -O '{\"module\":\"commonjs\"}' src/tests/server.ts",
"start": "node src/tests/server.mjs",
"test": "yarn test:unit && yarn test:browser",
"test:browser": "playwright test",
"test:unit": "NODE_OPTIONS=--inspect web-test-runner",
"test:unit:win": "SET NODE_OPTIONS=--inspect & web-test-runner",
"release": "yarn build && npm publish",
"lint": "eslint . --ext .ts"
"lint": "eslint . --ext .js"
},
"engines": {
"node": ">= 14"
Expand Down
29 changes: 29 additions & 0 deletions playwright.config.js
@@ -0,0 +1,29 @@
import { devices } from "@playwright/test"

const config = {
projects: [
{
name: "chrome",
use: { ...devices["Desktop Chrome"] }
},
{
name: "firefox",
use: { ...devices["Desktop Firefox"] }
}
],
retries: 2,
testDir: "./src/tests/",
testMatch: /(functional|integration)\/.*_tests\.js/,
webServer: {
command: "yarn start",
url: "http://localhost:9000/src/tests/fixtures/test.js",
timeout: 120 * 1000,
// eslint-disable-next-line no-undef
reuseExistingServer: !process.env.CI
},
use: {
baseURL: "http://localhost:9000/"
}
}

export default config
28 changes: 0 additions & 28 deletions playwright.config.ts

This file was deleted.

8 changes: 2 additions & 6 deletions rollup.config.js
@@ -1,13 +1,12 @@
import resolve from "@rollup/plugin-node-resolve"
import typescript from "@rollup/plugin-typescript"

import { version } from "./package.json"
const year = new Date().getFullYear()
const banner = `/*!\nTurbo ${version}\nCopyright © ${year} 37signals LLC\n */`

export default [
{
input: "src/index.ts",
input: "src/index.js",
output: [
{
name: "Turbo",
Expand All @@ -21,10 +20,7 @@ export default [
banner
}
],
plugins: [
resolve(),
typescript()
],
plugins: [resolve()],
watch: {
include: "src/**"
}
Expand Down
32 changes: 9 additions & 23 deletions src/core/bardo.ts → src/core/bardo.js
@@ -1,26 +1,12 @@
import { PermanentElementMap } from "./snapshot"

export interface BardoDelegate {
enteringBardo(currentPermanentElement: Element, newPermanentElement: Element): void
leavingBardo(currentPermanentElement: Element): void
}

export class Bardo {
readonly permanentElementMap: PermanentElementMap
readonly delegate: BardoDelegate

static async preservingPermanentElements(
delegate: BardoDelegate,
permanentElementMap: PermanentElementMap,
callback: () => void
) {
static async preservingPermanentElements(delegate, permanentElementMap, callback) {
const bardo = new this(delegate, permanentElementMap)
bardo.enter()
await callback()
bardo.leave()
}

constructor(delegate: BardoDelegate, permanentElementMap: PermanentElementMap) {
constructor(delegate, permanentElementMap) {
this.delegate = delegate
this.permanentElementMap = permanentElementMap
}
Expand All @@ -42,31 +28,31 @@ export class Bardo {
}
}

replaceNewPermanentElementWithPlaceholder(permanentElement: Element) {
replaceNewPermanentElementWithPlaceholder(permanentElement) {
const placeholder = createPlaceholderForPermanentElement(permanentElement)
permanentElement.replaceWith(placeholder)
}

replaceCurrentPermanentElementWithClone(permanentElement: Element) {
replaceCurrentPermanentElementWithClone(permanentElement) {
const clone = permanentElement.cloneNode(true)
permanentElement.replaceWith(clone)
}

replacePlaceholderWithPermanentElement(permanentElement: Element) {
replacePlaceholderWithPermanentElement(permanentElement) {
const placeholder = this.getPlaceholderById(permanentElement.id)
placeholder?.replaceWith(permanentElement)
}

getPlaceholderById(id: string) {
getPlaceholderById(id) {
return this.placeholders.find((element) => element.content == id)
}

get placeholders(): HTMLMetaElement[] {
return [...document.querySelectorAll<HTMLMetaElement>("meta[name=turbo-permanent-placeholder][content]")]
get placeholders() {
return [...document.querySelectorAll("meta[name=turbo-permanent-placeholder][content]")]
}
}

function createPlaceholderForPermanentElement(permanentElement: Element) {
function createPlaceholderForPermanentElement(permanentElement) {
const element = document.createElement("meta")
element.setAttribute("name", "turbo-permanent-placeholder")
element.setAttribute("content", permanentElement.id)
Expand Down
13 changes: 5 additions & 8 deletions src/core/cache.ts → src/core/cache.js
@@ -1,10 +1,7 @@
import { Session } from "./session"
import { setMetaContent } from "../util"

export class Cache {
readonly session: Session

constructor(session: Session) {
constructor(session) {
this.session = session
}

Expand All @@ -13,18 +10,18 @@ export class Cache {
}

resetCacheControl() {
this.setCacheControl("")
this.#setCacheControl("")
}

exemptPageFromCache() {
this.setCacheControl("no-cache")
this.#setCacheControl("no-cache")
}

exemptPageFromPreview() {
this.setCacheControl("no-preview")
this.#setCacheControl("no-preview")
}

private setCacheControl(value: string) {
#setCacheControl(value) {
setMetaContent("turbo-cache-control", value)
}
}
@@ -1,9 +1,8 @@
import { PageSnapshot } from "./page_snapshot"
import { Renderer } from "../renderer"
import { activateScriptElement } from "../../util"
import { Renderer } from "../renderer"

export class ErrorRenderer extends Renderer<HTMLBodyElement, PageSnapshot> {
static renderElement(currentElement: HTMLBodyElement, newElement: HTMLBodyElement) {
export class ErrorRenderer extends Renderer {
static renderElement(currentElement, newElement) {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We lost information here. currentElement: HTMLBodyElement makes it obvious this is not any HTML element, but <body> element. Maybe you could rename currentElement to currentBodyElement or add a comment explaining it's not any HTML element?

const { documentElement, body } = document

documentElement.replaceChild(newElement, body)
Expand Down