Skip to content

Commit 16cc40e

Browse files
authored
Convert development tools to ESM and update dependencies (TurboWarp#2266)
1 parent ec607af commit 16cc40e

19 files changed

Lines changed: 557 additions & 568 deletions

‎development/build-production.js‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
const pathUtil = require("path");
2-
const Builder = require("./builder");
1+
import * as pathUtil from "node:path";
2+
import Builder from "./builder.js";
33

4-
const outputDirectory = pathUtil.join(__dirname, "../build");
5-
const l10nOutput = pathUtil.join(__dirname, "../build-l10n");
4+
const outputDirectory = pathUtil.join(import.meta.dirname, "../build");
5+
const l10nOutput = pathUtil.join(import.meta.dirname, "../build-l10n");
66

77
const builder = new Builder("production");
88
const build = builder.build();

‎development/builder.js‎

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
1-
const fs = require("fs");
2-
const AdmZip = require("adm-zip");
3-
const pathUtil = require("path");
4-
const ExtendedJSON = require("@turbowarp/json");
5-
const compatibilityAliases = require("./compatibility-aliases");
6-
const parseMetadata = require("./parse-extension-metadata");
7-
const { mkdirp, recursiveReadDirectory } = require("./fs-utils");
1+
import * as fs from "node:fs";
2+
import * as pathUtil from "node:path";
3+
import AdmZip from "adm-zip";
4+
import chokidar from "chokidar";
5+
import spdxParser from "spdx-expression-parse";
6+
import { imageSize } from "image-size";
7+
import ExtendedJSON from "@turbowarp/json";
8+
import compatibilityAliases from "./compatibility-aliases.js";
9+
import parseMetadata from "./parse-extension-metadata.js";
10+
import parseTranslations from "./parse-extension-translations.js";
11+
import renderTemplate from "./render-template.js";
12+
import renderDocs from "./render-docs.js";
13+
import { mkdirp, recursiveReadDirectory } from "./fs-utils.js";
814

915
/**
1016
* @typedef {'development'|'production'|'desktop'} Mode
@@ -213,7 +219,6 @@ class ExtensionFile extends BuildFile {
213219
);
214220
}
215221

216-
const spdxParser = require("spdx-expression-parse");
217222
try {
218223
// Don't care about the result -- just see if it parses.
219224
spdxParser(metadata.license);
@@ -264,7 +269,6 @@ class ExtensionFile extends BuildFile {
264269
},
265270
};
266271

267-
const parseTranslations = require("./parse-extension-translations");
268272
const jsCode = fs.readFileSync(this.sourcePath, "utf-8");
269273
const unprefixedRuntimeStrings = parseTranslations(jsCode);
270274
const runtimeStrings = Object.fromEntries(
@@ -290,7 +294,7 @@ class HomepageFile extends BuildFile {
290294
samples,
291295
mode
292296
) {
293-
super(pathUtil.join(__dirname, "homepage-template.ejs"));
297+
super(pathUtil.join(import.meta.dirname, "homepage-template.ejs"));
294298

295299
/** @type {Record<string, ExtensionFile>} */
296300
this.extensionFiles = extensionFiles;
@@ -344,8 +348,6 @@ class HomepageFile extends BuildFile {
344348
}
345349

346350
read() {
347-
const renderTemplate = require("./render-template");
348-
349351
const mostRecentExtensions = Object.entries(this.extensionFiles)
350352
.sort((a, b) => b[1].getLastModified() - a[1].getLastModified())
351353
.slice(0, 5)
@@ -473,7 +475,6 @@ class JSONMetadataFile extends BuildFile {
473475

474476
class ImageFile extends BuildFile {
475477
validate() {
476-
const { imageSize } = require("image-size");
477478
const contents = this.read();
478479
const { width, height } = imageSize(contents);
479480
const aspectRatio = width / height;
@@ -544,7 +545,6 @@ class DocsFile extends BuildFile {
544545
}
545546

546547
read() {
547-
const renderDocs = require("./render-docs");
548548
const markdown = super.read().toString("utf-8");
549549
return renderDocs(markdown, this.extensionSlug);
550550
}
@@ -688,12 +688,15 @@ class Builder {
688688
this.mode = mode;
689689
}
690690

691-
this.extensionsRoot = pathUtil.join(__dirname, "../extensions");
692-
this.websiteRoot = pathUtil.join(__dirname, "../website");
693-
this.imagesRoot = pathUtil.join(__dirname, "../images");
694-
this.docsRoot = pathUtil.join(__dirname, "../docs");
695-
this.samplesRoot = pathUtil.join(__dirname, "../samples");
696-
this.translationsRoot = pathUtil.join(__dirname, "../translations");
691+
this.extensionsRoot = pathUtil.join(import.meta.dirname, "../extensions");
692+
this.websiteRoot = pathUtil.join(import.meta.dirname, "../website");
693+
this.imagesRoot = pathUtil.join(import.meta.dirname, "../images");
694+
this.docsRoot = pathUtil.join(import.meta.dirname, "../docs");
695+
this.samplesRoot = pathUtil.join(import.meta.dirname, "../samples");
696+
this.translationsRoot = pathUtil.join(
697+
import.meta.dirname,
698+
"../translations"
699+
);
697700
}
698701

699702
build() {
@@ -804,7 +807,9 @@ class Builder {
804807

805808
// Don't rely on node_modules being stored in a specific location or having a specific structure
806809
// so that this works when we are a dependency in a bigger npm tree.
807-
const scratchblocksPath = require.resolve("@turbowarp/scratchblocks");
810+
const scratchblocksPath = new URL(
811+
import.meta.resolve("@turbowarp/scratchblocks")
812+
).pathname;
808813
build.files["/docs-internal/scratchblocks.js"] = new BuildFile(
809814
scratchblocksPath
810815
);
@@ -854,8 +859,6 @@ class Builder {
854859
}
855860

856861
startWatcher(callback) {
857-
// Load chokidar lazily.
858-
const chokidar = require("chokidar");
859862
callback(this.tryBuild());
860863
chokidar
861864
.watch(
@@ -893,4 +896,4 @@ class Builder {
893896
}
894897
}
895898

896-
module.exports = Builder;
899+
export default Builder;

‎development/colors.js‎

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
const enableColor = !process.env.NO_COLOR;
22
const color = (i) => (enableColor ? i : "");
33

4-
module.exports = {
5-
RESET: color("\x1b[0m"),
6-
BOLD: color("\x1b[1m"),
7-
RED: color("\x1b[31m"),
8-
GREEN: color("\x1b[32m"),
9-
};
4+
export const RESET = color("\x1b[0m");
5+
export const BOLD = color("\x1b[1m");
6+
export const RED = color("\x1b[31m");
7+
export const GREEN = color("\x1b[32m");

‎development/compatibility-aliases.js‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const extensions = {
1+
const aliases = {
22
// maps old path to new path
33
"/LukeManiaStudios/ClonesPlus.js": "/Lily/ClonesPlus.js",
44
"/LukeManiaStudios/CommentBlocks.js": "/Lily/CommentBlocks.js",
@@ -10,4 +10,4 @@ const extensions = {
1010
"/LukeManiaStudios/TempVariables2.js": "/Lily/TempVariables2.js",
1111
};
1212

13-
module.exports = extensions;
13+
export default aliases;

‎development/download-translations.js‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
const pathUtil = require("path");
2-
const fs = require("fs");
3-
const {
1+
import * as pathUtil from "node:path";
2+
import * as fs from "node:fs";
3+
import {
44
transifexApi,
55
ORGANIZATION_NAME,
66
PROJECT_NAME,
77
RUNTIME_RESOURCE,
88
METADATA_RESOURCE,
99
SOURCE_LOCALE,
10-
} = require("./transifex-common");
10+
} from "./transifex-common.js";
1111

1212
/**
1313
* @template T

‎development/fs-utils.js‎

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
const fs = require("fs");
2-
const pathUtil = require("path");
1+
import * as fs from "node:fs";
2+
import * as pathUtil from "node:path";
33

44
/**
55
* Recursively read a directory.
66
* @param {string} directory
77
* @returns {Array<[string, string]>} List of tuples [name, absolutePath].
88
* The return result includes files in subdirectories, but not the subdirectories themselves.
99
*/
10-
const recursiveReadDirectory = (directory) => {
10+
export const recursiveReadDirectory = (directory) => {
1111
const result = [];
1212
for (const name of fs.readdirSync(directory)) {
1313
if (name.startsWith(".")) {
@@ -35,7 +35,7 @@ const recursiveReadDirectory = (directory) => {
3535
* Synchronous create a directory and any parents. Does nothing if the folder already exists.
3636
* @param {string} directory
3737
*/
38-
const mkdirp = (directory) => {
38+
export const mkdirp = (directory) => {
3939
try {
4040
fs.mkdirSync(directory, {
4141
recursive: true,
@@ -46,8 +46,3 @@ const mkdirp = (directory) => {
4646
}
4747
}
4848
};
49-
50-
module.exports = {
51-
recursiveReadDirectory,
52-
mkdirp,
53-
};

‎development/get-credits-for-gui.js‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
const fs = require("fs");
2-
const path = require("path");
3-
const https = require("https");
4-
const fsUtils = require("./fs-utils");
5-
const parseMetadata = require("./parse-extension-metadata");
1+
import * as fs from "node:fs";
2+
import * as path from "node:path";
3+
import * as https from "node:https";
4+
import * as fsUtils from "./fs-utils.js";
5+
import parseMetadata from "./parse-extension-metadata.js";
66

77
class AggregatePersonInfo {
88
/** @param {Person} person */
@@ -62,7 +62,7 @@ const run = async () => {
6262
*/
6363
const aggregate = new Map();
6464

65-
const extensionRoot = path.resolve(__dirname, "../extensions/");
65+
const extensionRoot = path.resolve(import.meta.dirname, "../extensions/");
6666
for (const [name, absolutePath] of fsUtils.recursiveReadDirectory(
6767
extensionRoot
6868
)) {

‎development/parse-extension-metadata.js‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,4 +115,4 @@ const parseMetadata = (extensionCode) => {
115115
return metadata;
116116
};
117117

118-
module.exports = parseMetadata;
118+
export default parseMetadata;

‎development/parse-extension-translations.js‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
const espree = require("espree");
2-
const esquery = require("esquery");
3-
const parseMetadata = require("./parse-extension-metadata");
1+
import * as espree from "espree";
2+
import esquery from "esquery";
3+
import parseMetadata from "./parse-extension-metadata.js";
44

55
/**
66
* @fileoverview Parses extension code to find calls to Scratch.translate() and statically
@@ -120,4 +120,4 @@ const parseTranslations = (js) => {
120120
return result;
121121
};
122122

123-
module.exports = parseTranslations;
123+
export default parseTranslations;

‎development/render-docs.js‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
const path = require("path");
2-
const MarkdownIt = require("markdown-it");
3-
const renderTemplate = require("./render-template");
1+
import * as path from "node:path";
2+
import MarkdownIt from "markdown-it";
3+
import renderTemplate from "./render-template.js";
44

55
// From GitHub's markdown alert SVG icons: https://github.com/primer/octicons
66
const blockIcons = {
@@ -140,7 +140,7 @@ const renderDocs = (markdownSource, slug) => {
140140

141141
const bodyHTML = md.renderer.render(tokens, md.options, env);
142142

143-
return renderTemplate(path.join(__dirname, "docs-template.ejs"), {
143+
return renderTemplate(path.join(import.meta.dirname, "docs-template.ejs"), {
144144
slug,
145145
headerHTML,
146146
headerText,
@@ -149,4 +149,4 @@ const renderDocs = (markdownSource, slug) => {
149149
});
150150
};
151151

152-
module.exports = renderDocs;
152+
export default renderDocs;

0 commit comments

Comments
 (0)