From 14b4855df4c506489dcdccdc335ee6e86afe75f1 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sat, 28 Mar 2026 23:10:35 -0400 Subject: [PATCH 01/27] Fix charts dashboard sentence Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- examples/google-analytics/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/google-analytics/README.md b/examples/google-analytics/README.md index 165d7c9a8..1824c2928 100644 --- a/examples/google-analytics/README.md +++ b/examples/google-analytics/README.md @@ -26,4 +26,4 @@ The Google Analytics [API Quickstart](https://developers.google.com/analytics/de ## Charts -The dashboard displays a variety of charts, made with [Observable Plot](https://observablehq.com/plot/). With the key numbers at the top, a line chart or an area chart. Active users are displayed with a horizon chart faceted by channel. The “new vs. returning” chart is a Marimekko. Finally, the activity by day and hour is a punchcard chart. The code for each of these charts is available in [`src/index.md`](./src/index.md?plain=1). +The dashboard displays a variety of charts made using [Observable Plot](https://observablehq.com/plot/) with the key numbers at the top displayed as line charts. Active users are displayed with a horizon chart faceted by channel. The “new vs. returning” chart is a Marimekko. Finally, the activity by day and hour is a punchcard chart. The code for each of these charts is available in [`src/index.md`](./src/index.md?plain=1). From e8d5d30109c137b2c3175f6b84a46cd875dbbe25 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Tue, 31 Mar 2026 13:31:44 -0400 Subject: [PATCH 02/27] Rewrite chart descriptions Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- examples/google-analytics/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/google-analytics/README.md b/examples/google-analytics/README.md index 1824c2928..dadb1643b 100644 --- a/examples/google-analytics/README.md +++ b/examples/google-analytics/README.md @@ -26,4 +26,4 @@ The Google Analytics [API Quickstart](https://developers.google.com/analytics/de ## Charts -The dashboard displays a variety of charts made using [Observable Plot](https://observablehq.com/plot/) with the key numbers at the top displayed as line charts. Active users are displayed with a horizon chart faceted by channel. The “new vs. returning” chart is a Marimekko. Finally, the activity by day and hour is a punchcard chart. The code for each of these charts is available in [`src/index.md`](./src/index.md?plain=1). +The dashboard displays a variety of charts made using [Observable Plot](https://observablehq.com/plot/) with the key numbers at the top displayed as line charts. Rolling 28-day active users and engaged sessions are shown with horizon charts. Active users by channel (partitioned between New and Returning) is shown as a Marimekko chart. Finally, active and new usersby day and hour are punchcard charts. The code for each of these charts is available in [`src/index.md`](./src/index.md?plain=1). From c86b8b9482b516ccb197a2bfa5395d825251241d Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sat, 28 Mar 2026 23:00:00 -0400 Subject: [PATCH 03/27] spelling: a Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- test/format-test.ts | 2 +- test/theme-test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/format-test.ts b/test/format-test.ts index 88aa9c31d..7d61a08ed 100644 --- a/test/format-test.ts +++ b/test/format-test.ts @@ -10,7 +10,7 @@ describe("formatIsoDate", () => { }); describe("formatLocaleDate", () => { - it("returns an string formatted for en-US", () => { + it("returns a string formatted for en-US", () => { assert.strictEqual(formatLocaleDate(new Date("2013-01-02")), "Jan 1, 2013"); assert.strictEqual(formatLocaleDate(new Date("2013-01-02T08:00:00")), "Jan 2, 2013"); assert.strictEqual(formatLocaleDate(new Date("2013-01-02T08:00:00Z")), "Jan 2, 2013"); diff --git a/test/theme-test.ts b/test/theme-test.ts index 1182d2999..254ce1c02 100644 --- a/test/theme-test.ts +++ b/test/theme-test.ts @@ -86,7 +86,7 @@ describe("renderTheme", () => { @import url("observablehq:theme-alt.css");` ); }); - it("renders an wide theme", () => { + it("renders a wide theme", () => { assert.strictEqual( renderTheme(["air", "wide"]), `@import url("observablehq:default.css"); From d23638f8378b40fb371c3c814d55e1402b8891e9 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sat, 28 Mar 2026 22:59:28 -0400 Subject: [PATCH 04/27] spelling: a.k.a. Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- src/javascript/parse.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/javascript/parse.ts b/src/javascript/parse.ts index aef288568..8b92b4789 100644 --- a/src/javascript/parse.ts +++ b/src/javascript/parse.ts @@ -28,7 +28,7 @@ export const acornOptions: Options = { export interface JavaScriptNode { body: Program | Expression; - declarations: Identifier[] | null; // null for expressions that can’t declare top-level variables, a.k.a outputs + declarations: Identifier[] | null; // null for expressions that can’t declare top-level variables, a.k.a. outputs references: Identifier[]; // the unbound references, a.k.a. inputs files: FileExpression[]; imports: ImportReference[]; From a4aa468f73dba1dc3daa575810eea08d3d42ebff Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sun, 29 Mar 2026 12:42:53 -0400 Subject: [PATCH 05/27] spelling: collapse Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- src/client/stdlib/inputs.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client/stdlib/inputs.css b/src/client/stdlib/inputs.css index 2dfe8236d..95119a7d2 100644 --- a/src/client/stdlib/inputs.css +++ b/src/client/stdlib/inputs.css @@ -39,7 +39,7 @@ form.__ns__-toggle > label { margin-right: var(--length2); } -/* Since toggles won’t wrap on narrow screens, collpase to content. */ +/* Since toggles won’t wrap on narrow screens, collapse to content. */ form.__ns__-toggle > label, form.__ns__-toggle .__ns__-input { width: initial; From 49d3b598a500ee62d1402a6d7c4a9b517a5a4b3f Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sun, 29 Mar 2026 14:10:24 -0400 Subject: [PATCH 06/27] spelling: dropoff Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/lib/nyc-taxi.parquet.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/lib/nyc-taxi.parquet.sh b/docs/lib/nyc-taxi.parquet.sh index 776226156..e95bd2b1b 100644 --- a/docs/lib/nyc-taxi.parquet.sh +++ b/docs/lib/nyc-taxi.parquet.sh @@ -14,8 +14,8 @@ COPY (SELECT HOUR(datetime) + MINUTE(datetime) / 60 AS time, ST_X(pick)::INTEGER AS px, -- extract pickup x-coord ST_Y(pick)::INTEGER AS py, -- extract pickup y-coord - ST_X(drop)::INTEGER AS dx, -- extract dropff x-coord - ST_Y(drop)::INTEGER AS dy -- extract dropff y-coord + ST_X(drop)::INTEGER AS dx, -- extract dropoff x-coord + ST_Y(drop)::INTEGER AS dy -- extract dropoff y-coord FROM rides ORDER BY 2,3,4,5,1 -- optimize output size by sorting ) TO STDOUT (FORMAT 'parquet', COMPRESSION 'zstd', ROW_GROUP_SIZE 10_000_000); From 85f5671bfdb0222039de3fec1f1fa8f58e6eec20 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sat, 28 Mar 2026 23:00:39 -0400 Subject: [PATCH 07/27] spelling: each Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/javascript.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/javascript.md b/docs/javascript.md index 37c2ee488..c92764ab1 100644 --- a/docs/javascript.md +++ b/docs/javascript.md @@ -76,7 +76,7 @@ And here’s a line chart of Apple’s stock price using [Observable Plot](./lib Plot.lineY(aapl, {x: "Date", y: "Close"}).plot({y: {grid: true}}) ``` -Code blocks automatically re-run when referenced [reactive variables](./reactivity) change, or when you edit the page during preview. The block below references the built-in variable `now` representing the current time in milliseconds; because `now` is reactive, this block runs sixty times a second and each each new span it returns replaces the one previously displayed. +Code blocks automatically re-run when referenced [reactive variables](./reactivity) change, or when you edit the page during preview. The block below references the built-in variable `now` representing the current time in milliseconds; because `now` is reactive, this block runs sixty times a second and each new span it returns replaces the one previously displayed. ```js echo html`Rainbow text!` From d587af3c1737aceb8fc32f35e3be835fffc79774 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sun, 29 Mar 2026 12:44:12 -0400 Subject: [PATCH 08/27] spelling: entities Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- test/info-test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/info-test.ts b/test/info-test.ts index a5fd6a9d2..505fcc258 100644 --- a/test/info-test.ts +++ b/test/info-test.ts @@ -123,7 +123,7 @@ describe("parseInfo(input)", () => { it("parses single-quoted strings with double quotes", () => { assert.deepStrictEqual(parseInfo("js echo='hello \"world\"'"), {tag: "js", attributes: {echo: 'hello "world"'}}); }); - it("parses attribute values with escaped entites", () => { + it("parses attribute values with escaped entities", () => { assert.deepStrictEqual(parseInfo("js echo="world""), {tag: "js", attributes: {echo: '"world"'}}); assert.deepStrictEqual(parseInfo('js echo=""world""'), {tag: "js", attributes: {echo: '"world"'}}); assert.deepStrictEqual(parseInfo("js echo='"world"'"), {tag: "js", attributes: {echo: '"world"'}}); From 15d3941ba828251b47c61f424776cfc253e106b0 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sun, 29 Mar 2026 12:44:23 -0400 Subject: [PATCH 09/27] spelling: expression Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- src/javascript/parse.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/javascript/parse.ts b/src/javascript/parse.ts index 8b92b4789..cc0e94ce2 100644 --- a/src/javascript/parse.ts +++ b/src/javascript/parse.ts @@ -15,7 +15,7 @@ import {syntaxError} from "./syntaxError.js"; export interface ParseOptions { /** The path to the source within the source root. */ path: string; - /** If true, require the input to be an expresssion. */ + /** If true, require the input to be an expression. */ inline?: boolean; /** Any dynamic route parameters for observable.params. */ params?: Params; From b48a5cb05b7df3df377e995e06c5a00c3f383fae Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sat, 28 Mar 2026 23:14:44 -0400 Subject: [PATCH 10/27] spelling: fall back Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/inputs/range.md | 2 +- src/build.ts | 8 ++++---- src/javascript/files.ts | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/inputs/range.md b/docs/inputs/range.md index 777e645c5..5742c21ab 100644 --- a/docs/inputs/range.md +++ b/docs/inputs/range.md @@ -119,4 +119,4 @@ If *validate* is not defined, [*number*.checkValidity](https://html.spec.whatwg. The *format* function should return a string value that is compatible with native number parsing. Hence, the default [formatTrim](https://github.com/observablehq/inputs?tab=readme-ov-file#inputsformattrimnumber) is recommended. -If a *transform* function is specified, an inverse transform function *invert* is strongly recommended. If *invert* is not provided, the Range will fallback to Newton’s method, but this may be slow or inaccurate. Passing Math.sqrt, Math.log, or Math.exp as a *transform* will automatically supply the corresponding *invert*. If *min* is greater than *max*, *i.e.* if the extent is inverted, then *transform* and *invert* will default to `(value) => -value`. +If a *transform* function is specified, an inverse transform function *invert* is strongly recommended. If *invert* is not provided, the Range will fall back to Newton’s method, but this may be slow or inaccurate. Passing Math.sqrt, Math.log, or Math.exp as a *transform* will automatically supply the corresponding *invert*. If *min* is greater than *max*, *i.e.* if the extent is inverted, then *transform* and *invert* will default to `(value) => -value`. diff --git a/src/build.ts b/src/build.ts index 945901042..6f23e8b21 100644 --- a/src/build.ts +++ b/src/build.ts @@ -340,22 +340,22 @@ export async function build( resolveFile(specifier) { const r = resolvers.resolveFile(specifier); const a = aliases.get(resolvePath(path, r)); - return a ? relativePath(path, a) : specifier; // fallback to specifier if enoent + return a ? relativePath(path, a) : specifier; // fall back to specifier if enoent }, resolveStylesheet(specifier) { const r = resolvers.resolveStylesheet(specifier); const a = aliases.get(resolvePath(path, r)); - return a ? relativePath(path, a) : isPathImport(specifier) ? specifier : r; // fallback to specifier if enoent + return a ? relativePath(path, a) : isPathImport(specifier) ? specifier : r; // fall back to specifier if enoent }, resolveImport(specifier) { const r = resolvers.resolveImport(specifier); const a = aliases.get(resolvePath(path, r)); - return a ? relativePath(path, a) : isPathImport(specifier) ? specifier : r; // fallback to specifier if enoent + return a ? relativePath(path, a) : isPathImport(specifier) ? specifier : r; // fall back to specifier if enoent }, resolveScript(specifier) { const r = resolvers.resolveScript(specifier); const a = aliases.get(resolvePath(path, r)); - return a ? relativePath(path, a) : specifier; // fallback to specifier if enoent + return a ? relativePath(path, a) : specifier; // fall back to specifier if enoent } } }); diff --git a/src/javascript/files.ts b/src/javascript/files.ts index ec4c5bca5..ef05675e8 100644 --- a/src/javascript/files.ts +++ b/src/javascript/files.ts @@ -86,7 +86,7 @@ export function findFiles( // Find all calls to FileAttachment. If the call is part of a member // expression such as FileAttachment("foo.txt").csv, use this to determine the - // file method ("csv"); otherwise fallback to the to file extension to + // file method ("csv"); otherwise fall back to the to file extension to // determine the method. Also enforce that FileAttachment is passed a single // static string literal. // From 0c60457b90d0411cfdd030701f815fb4bfe07ef6 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sun, 29 Mar 2026 12:45:19 -0400 Subject: [PATCH 11/27] spelling: generate Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- examples/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/README.md b/examples/README.md index 22a5f461d..700c2403d 100644 --- a/examples/README.md +++ b/examples/README.md @@ -63,7 +63,7 @@ - [`loader-github`](https://observablehq.observablehq.cloud/framework-example-loader-github/) - Load data from GitHub - [`loader-google-analytics`](https://observablehq.observablehq.cloud/framework-example-loader-google-analytics/) - Load data from Google Analytics - [`loader-julia-to-txt`](https://observablehq.observablehq.cloud/framework-example-loader-julia-to-txt/) - Generate TXT from Julia -- [`loader-parquet`](https://observablehq.observablehq.cloud/framework-example-loader-parquet/) - Generat Apache Parquet files +- [`loader-parquet`](https://observablehq.observablehq.cloud/framework-example-loader-parquet/) - Generate Apache Parquet files - [`loader-postgres`](https://observablehq.observablehq.cloud/framework-example-loader-postgres/) - Load data from PostgreSQL - [`loader-python-to-csv`](https://observablehq.observablehq.cloud/framework-example-loader-python-to-csv/) - Generate CSV from Python - [`loader-python-to-parquet`](https://observablehq.observablehq.cloud/framework-example-loader-python-to-parquet) - Generate Apache Parquet from Python From ca865f15548aff9a4b053c11e3ebc763ff4b2b69 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sun, 29 Mar 2026 12:46:20 -0400 Subject: [PATCH 12/27] spelling: initial Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- src/resolvers.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/resolvers.ts b/src/resolvers.ts index 7a9ecb8ce..8f670ec85 100644 --- a/src/resolvers.ts +++ b/src/resolvers.ts @@ -196,7 +196,7 @@ async function resolveResolvers( fileMethods: initialFileMethods, localImports: initialLocalImports, globalImports: initialGlobalImports, - staticImports: intialStaticImports, + staticImports: initialStaticImports, stylesheets: initialStylesheets }: { files?: Iterable | null; @@ -212,7 +212,7 @@ async function resolveResolvers( const fileMethods = new Set(initialFileMethods); const localImports = new Set(initialLocalImports); const globalImports = new Set(initialGlobalImports); - const staticImports = new Set(intialStaticImports); + const staticImports = new Set(initialStaticImports); const stylesheets = new Set(initialStylesheets); const resolutions = new Map(); From d3ae79263cf2b4918c1488f9b570cc24160c86d5 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sun, 29 Mar 2026 12:46:02 -0400 Subject: [PATCH 13/27] spelling: instead Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- examples/loader-arrow/src/index.md | 4 ++-- examples/loader-parquet/src/index.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/loader-arrow/src/index.md b/examples/loader-arrow/src/index.md index 1eb10e24e..f7908f644 100644 --- a/examples/loader-arrow/src/index.md +++ b/examples/loader-arrow/src/index.md @@ -36,7 +36,7 @@ The above data loader lives in `data/samples.arrow.js`, so we can load the data const samples = FileAttachment("./data/samples.arrow").arrow(); ``` -The `samples` table has two columns: `date` and `value`. We can display the table using `Inputs.table`, though note that the `date` column is represented as numbers intead of `Date` instances — some information was lost when serialized as Arrow. (Perhaps in the future the Apache Arrow JavaScript library could return `Date` instances for date columns? Though this is typically much slower than representing dates as numbers in typed arrays.) We use the **format** option to make these dates readable. +The `samples` table has two columns: `date` and `value`. We can display the table using `Inputs.table`, though note that the `date` column is represented as numbers instead of `Date` instances — some information was lost when serialized as Arrow. (Perhaps in the future the Apache Arrow JavaScript library could return `Date` instances for date columns? Though this is typically much slower than representing dates as numbers in typed arrays.) We use the **format** option to make these dates readable. ```js echo Inputs.table(samples, { @@ -46,7 +46,7 @@ Inputs.table(samples, { }) ``` -Lastly, we can pass the table to `Plot.plot` to make a simple line chart. Again, since the `date` column is numbers, Plot will interpret these as quantitative values by default; by setting the **type** of the *x* scale to *utc*, we tell Plot to treat these values as dates intead, producing a more readable axis. +Lastly, we can pass the table to `Plot.plot` to make a simple line chart. Again, since the `date` column is numbers, Plot will interpret these as quantitative values by default; by setting the **type** of the *x* scale to *utc*, we tell Plot to treat these values as dates instead, producing a more readable axis. ```js echo Plot.plot({ diff --git a/examples/loader-parquet/src/index.md b/examples/loader-parquet/src/index.md index 7d2f942db..74441e83f 100644 --- a/examples/loader-parquet/src/index.md +++ b/examples/loader-parquet/src/index.md @@ -40,7 +40,7 @@ The above data loader lives in `data/samples.parquet.js`, so we can load the dat const samples = FileAttachment("./data/samples.parquet").parquet(); ``` -The `samples` table has two columns: `date` and `value`. We can display the table using `Inputs.table`, though note that the `date` column is represented as numbers intead of `Date` instances — some information was lost when serialized as Parquet. (Perhaps in the future the Apache Arrow JavaScript library could return `Date` instances for date columns? Though this is typically much slower than representing dates as numbers in typed arrays.) We use the **format** option to make these dates readable. +The `samples` table has two columns: `date` and `value`. We can display the table using `Inputs.table`, though note that the `date` column is represented as numbers instead of `Date` instances — some information was lost when serialized as Parquet. (Perhaps in the future the Apache Arrow JavaScript library could return `Date` instances for date columns? Though this is typically much slower than representing dates as numbers in typed arrays.) We use the **format** option to make these dates readable. ```js echo Inputs.table(samples, { @@ -50,7 +50,7 @@ Inputs.table(samples, { }) ``` -Lastly, we can pass the table to `Plot.plot` to make a simple line chart. Again, since the `date` column is numbers, Plot will interpret these as quantitative values by default; by setting the **type** of the *x* scale to *utc*, we tell Plot to treat these values as dates intead, producing a more readable axis. +Lastly, we can pass the table to `Plot.plot` to make a simple line chart. Again, since the `date` column is numbers, Plot will interpret these as quantitative values by default; by setting the **type** of the *x* scale to *utc*, we tell Plot to treat these values as dates instead, producing a more readable axis. ```js echo Plot.plot({ From 26378e23e967cbf33f29f7464a7b697623a25510 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sun, 29 Mar 2026 12:46:07 -0400 Subject: [PATCH 14/27] spelling: interactive Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- examples/us-dams/src/by-state.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/us-dams/src/by-state.md b/examples/us-dams/src/by-state.md index 45a5899e8..de58e1722 100644 --- a/examples/us-dams/src/by-state.md +++ b/examples/us-dams/src/by-state.md @@ -228,7 +228,7 @@ const damSearch = Inputs.search(damsSelectedState); const damSearchValue = Generators.input(damSearch); ``` - + ```js import deck from "npm:deck.gl"; From 2936197c64f7c6e20cda941b835b776c707565f9 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sat, 28 Mar 2026 23:00:51 -0400 Subject: [PATCH 15/27] spelling: into Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- src/rollup.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rollup.ts b/src/rollup.ts index 6a41c5d46..7c827c07a 100644 --- a/src/rollup.ts +++ b/src/rollup.ts @@ -21,7 +21,7 @@ const STYLE_MODULES = { ...Object.fromEntries(THEMES.map(({name, path}) => [`observablehq:theme-${name}.css`, path])) }; -// These libraries are currently bundled in to a wrapper. +// These libraries are currently bundled into a wrapper. const BUNDLED_MODULES = [ "@observablehq/inputs", // observablehq:stdlib/inputs.js "@observablehq/inspector", // observablehq:runtime.js From 325b6e6243c4d5586d0019ff0852565d58847d7d Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sun, 29 Mar 2026 12:44:46 -0400 Subject: [PATCH 16/27] spelling: links with extensions Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- test/config-test.ts | 12 ++++++------ test/resolvers-test.ts | 6 +++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/test/config-test.ts b/test/config-test.ts index 82c81daac..9ddac2a30 100644 --- a/test/config-test.ts +++ b/test/config-test.ts @@ -216,7 +216,7 @@ describe("normalizePath(path) with {cleanUrls: false} (deprecated)", () => { it("appends .html to extension-less links", () => { assert.strictEqual(normalize("foo"), "foo.html"); }); - it("does not append .html to extensioned links", () => { + it("does not append .html to links with extensions", () => { assert.strictEqual(normalize("foo.png"), "foo.png"); assert.strictEqual(normalize("foo.html"), "foo.html"); assert.strictEqual(normalize("foo.md"), "foo.md"); @@ -263,11 +263,11 @@ describe("normalizePath(path) with {cleanUrls: true} (deprecated)", () => { it("does not append .html to extension-less links", () => { assert.strictEqual(normalize("foo"), "foo"); }); - it("does not append .html to extensioned links", () => { + it("does not append .html to links with extensions", () => { assert.strictEqual(normalize("foo.png"), "foo.png"); assert.strictEqual(normalize("foo.md"), "foo.md"); }); - it("removes .html from extensioned links", () => { + it("removes .html from links with extensions", () => { assert.strictEqual(normalize("foo.html"), "foo"); }); it("preserves absolute paths", () => { @@ -312,7 +312,7 @@ describe("normalizePath(path) with {preserveExtension: true}", () => { it("appends .html to extension-less links", () => { assert.strictEqual(normalize("foo"), "foo.html"); }); - it("does not append .html to extensioned links", () => { + it("does not append .html to links with extensions", () => { assert.strictEqual(normalize("foo.png"), "foo.png"); assert.strictEqual(normalize("foo.html"), "foo.html"); assert.strictEqual(normalize("foo.md"), "foo.md"); @@ -359,11 +359,11 @@ describe("normalizePath(path) with {preserveExtension: false}", () => { it("does not append .html to extension-less links", () => { assert.strictEqual(normalize("foo"), "foo"); }); - it("does not append .html to extensioned links", () => { + it("does not append .html to links with extensions", () => { assert.strictEqual(normalize("foo.png"), "foo.png"); assert.strictEqual(normalize("foo.md"), "foo.md"); }); - it("removes .html from extensioned links", () => { + it("removes .html from links with extensions", () => { assert.strictEqual(normalize("foo.html"), "foo"); }); it("preserves absolute paths", () => { diff --git a/test/resolvers-test.ts b/test/resolvers-test.ts index 090d34d21..4458868a6 100644 --- a/test/resolvers-test.ts +++ b/test/resolvers-test.ts @@ -99,7 +99,7 @@ describe("resolveLink(href) with {preserveExtension: true}", () => { const normalize = await getResolveLink(); assert.strictEqual(normalize("foo"), "./foo.html"); }); - it("does not append .html to extensioned links", async () => { + it("does not append .html to links with extensions", async () => { const normalize = await getResolveLink(); assert.strictEqual(normalize("foo.png"), "./foo.png"); assert.strictEqual(normalize("foo.html"), "./foo.html"); @@ -174,12 +174,12 @@ describe("resolveLink(href) with {preserveExtension: false}", () => { const normalize = await getResolveLink(); assert.strictEqual(normalize("foo"), "./foo"); }); - it("does not append .html to extensioned links", async () => { + it("does not append .html to links with extensions", async () => { const normalize = await getResolveLink(); assert.strictEqual(normalize("foo.png"), "./foo.png"); assert.strictEqual(normalize("foo.md"), "./foo.md"); }); - it("removes .html from extensioned links", async () => { + it("removes .html from links with extensions", async () => { const normalize = await getResolveLink(); assert.strictEqual(normalize("foo.html"), "./foo"); }); From fcf3a0e03e6b47cee40cc52ab2e337234646a1ea Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sat, 28 Mar 2026 23:31:36 -0400 Subject: [PATCH 17/27] spelling: location, Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/getting-started.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/getting-started.md b/docs/getting-started.md index d410801be..452a4f335 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -276,7 +276,7 @@ const [longitude, latitude] = location; To personalize this code snippet to your current location, edit the longitude and latitude values above, or click the **Locate me** button above. -
NWS does not provide forecasts for points outside the United States. If you specify such a location the API will error and the data loader will fail.
+
NWS does not provide forecasts for points outside the United States. If you specify such a location, the API will error and the data loader will fail.
If you would rather write your data loader in Python, R, or some other language, take a peek at the next steps below before continuing.
From 18db5b7f0e5351661e5a10238ef80f56328227cb Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sun, 29 Mar 2026 12:48:10 -0400 Subject: [PATCH 18/27] spelling: mortgage Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- examples/mortgage-rates/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/mortgage-rates/README.md b/examples/mortgage-rates/README.md index 68347cdbc..8925e307e 100644 --- a/examples/mortgage-rates/README.md +++ b/examples/mortgage-rates/README.md @@ -4,7 +4,7 @@ View live: -This is an example Observable Framework project that tracks mortage rates published by Freddie Mac — Federal Home Loan Mortgage Corporation — every week since 1971. +This is an example Observable Framework project that tracks mortgage rates published by Freddie Mac — Federal Home Loan Mortgage Corporation — every week since 1971. ## Data loader From a17a3db2b523151d93970aa5edfa986198d27639 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sun, 29 Mar 2026 12:48:28 -0400 Subject: [PATCH 19/27] spelling: occurrence Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/lib/d3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/lib/d3.md b/docs/lib/d3.md index f63101463..b32692d5f 100644 --- a/docs/lib/d3.md +++ b/docs/lib/d3.md @@ -6,7 +6,7 @@ import * as d3 from "npm:d3"; ``` -For example, here is an interactive [force-directed](https://github.com/d3/d3-force) graph showing the character co-occurence in _Les Misérables_; data is from the [Stanford Graph Base](https://www-cs-faculty.stanford.edu/~knuth/sgb.html). Color represents arbitrary clusters in the data. Drag nodes below to better understand connections. +For example, here is an interactive [force-directed](https://github.com/d3/d3-force) graph showing the character co-occurrence in _Les Misérables_; data is from the [Stanford Graph Base](https://www-cs-faculty.stanford.edu/~knuth/sgb.html). Color represents arbitrary clusters in the data. Drag nodes below to better understand connections. ```js echo const width = 640; From 7b4cbec08ce3c6ba3d98f5593526b4e3e6a6f124 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sat, 28 Mar 2026 23:00:10 -0400 Subject: [PATCH 20/27] spelling: of Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- .../output/build/jsr/_jsr/@std/random@0.1.0/shuffle.0ef8dd95.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/output/build/jsr/_jsr/@std/random@0.1.0/shuffle.0ef8dd95.js b/test/output/build/jsr/_jsr/@std/random@0.1.0/shuffle.0ef8dd95.js index 07667ead1..7ffbd64ef 100644 --- a/test/output/build/jsr/_jsr/@std/random@0.1.0/shuffle.0ef8dd95.js +++ b/test/output/build/jsr/_jsr/@std/random@0.1.0/shuffle.0ef8dd95.js @@ -28,7 +28,7 @@ import { randomIntegerBetween } from "./integer_between.4528767d.js"; ...items ]; // https://en.wikipedia.org/wiki/Fisher–Yates_shuffle#The_modern_algorithm - // -- To shuffle an array a of n elements (indices 0..n-1): + // -- To shuffle an array of n elements (indices 0..n-1): // for i from n−1 down to 1 do for(let i = result.length - 1; i >= 1; --i){ // j ← random integer such that 0 ≤ j ≤ i From 4dac7578d7d42d4635a441d2912581a29230c7ca Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sat, 28 Mar 2026 23:15:46 -0400 Subject: [PATCH 21/27] spelling: otherwise, Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- src/javascript/files.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/javascript/files.ts b/src/javascript/files.ts index ef05675e8..7676ae4d7 100644 --- a/src/javascript/files.ts +++ b/src/javascript/files.ts @@ -86,7 +86,7 @@ export function findFiles( // Find all calls to FileAttachment. If the call is part of a member // expression such as FileAttachment("foo.txt").csv, use this to determine the - // file method ("csv"); otherwise fall back to the to file extension to + // file method ("csv"); otherwise, fall back to the to file extension to // determine the method. Also enforce that FileAttachment is passed a single // static string literal. // From 23b13f6651b4faae299272905cb13f8b3eaea189 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sat, 28 Mar 2026 23:01:49 -0400 Subject: [PATCH 22/27] spelling: perhaps, in the future, Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- examples/loader-arrow/src/index.md | 2 +- examples/loader-parquet/src/index.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/loader-arrow/src/index.md b/examples/loader-arrow/src/index.md index f7908f644..25e094cc2 100644 --- a/examples/loader-arrow/src/index.md +++ b/examples/loader-arrow/src/index.md @@ -36,7 +36,7 @@ The above data loader lives in `data/samples.arrow.js`, so we can load the data const samples = FileAttachment("./data/samples.arrow").arrow(); ``` -The `samples` table has two columns: `date` and `value`. We can display the table using `Inputs.table`, though note that the `date` column is represented as numbers instead of `Date` instances — some information was lost when serialized as Arrow. (Perhaps in the future the Apache Arrow JavaScript library could return `Date` instances for date columns? Though this is typically much slower than representing dates as numbers in typed arrays.) We use the **format** option to make these dates readable. +The `samples` table has two columns: `date` and `value`. We can display the table using `Inputs.table`, though note that the `date` column is represented as numbers instead of `Date` instances — some information was lost when serialized as Arrow. (Perhaps, in the future, the Apache Arrow JavaScript library could return `Date` instances for date columns? Though this is typically much slower than representing dates as numbers in typed arrays.) We use the **format** option to make these dates readable. ```js echo Inputs.table(samples, { diff --git a/examples/loader-parquet/src/index.md b/examples/loader-parquet/src/index.md index 74441e83f..bf27f060c 100644 --- a/examples/loader-parquet/src/index.md +++ b/examples/loader-parquet/src/index.md @@ -40,7 +40,7 @@ The above data loader lives in `data/samples.parquet.js`, so we can load the dat const samples = FileAttachment("./data/samples.parquet").parquet(); ``` -The `samples` table has two columns: `date` and `value`. We can display the table using `Inputs.table`, though note that the `date` column is represented as numbers instead of `Date` instances — some information was lost when serialized as Parquet. (Perhaps in the future the Apache Arrow JavaScript library could return `Date` instances for date columns? Though this is typically much slower than representing dates as numbers in typed arrays.) We use the **format** option to make these dates readable. +The `samples` table has two columns: `date` and `value`. We can display the table using `Inputs.table`, though note that the `date` column is represented as numbers instead of `Date` instances — some information was lost when serialized as Parquet. (Perhaps, in the future, the Apache Arrow JavaScript library could return `Date` instances for date columns? Though this is typically much slower than representing dates as numbers in typed arrays.) We use the **format** option to make these dates readable. ```js echo Inputs.table(samples, { From c346ccdbbb16fa64dd09c74b8bc96ddef627a799 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sun, 29 Mar 2026 12:49:40 -0400 Subject: [PATCH 23/27] spelling: targeting Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/lib/deckgl.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/lib/deckgl.md b/docs/lib/deckgl.md index 1df7e2ac8..1905eaf0b 100644 --- a/docs/lib/deckgl.md +++ b/docs/lib/deckgl.md @@ -98,7 +98,7 @@ const colorLegend = Plot.plot({ ### 3. The DeckGL instance -We create a DeckGL instance targetting the container defined in the layout. During development & preview, this code can run several times, so we take care to clean it up each time the code block runs: +We create a DeckGL instance targeting the container defined in the layout. During development & preview, this code can run several times, so we take care to clean it up each time the code block runs: ```js echo const deckInstance = new DeckGL({ From 89ca501f5475b8bd47626b8f93d46f715e545358 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sun, 29 Mar 2026 12:49:48 -0400 Subject: [PATCH 24/27] spelling: temporary Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- test/fileWatchers-test.ts | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/test/fileWatchers-test.ts b/test/fileWatchers-test.ts index abfbb12b1..0d3f3c6b5 100644 --- a/test/fileWatchers-test.ts +++ b/test/fileWatchers-test.ts @@ -9,14 +9,14 @@ import {resolvePath} from "../src/path.js"; describe("FileWatchers.of(loaders, path, names, callback)", () => { it( "watches a file", - withTemporyWatcher("files.md", ["file-top.csv"], async (root, wait) => { + withTemporaryWatcher("files.md", ["file-top.csv"], async (root, wait) => { touch(join(root, "file-top.csv")); assert.deepStrictEqual(await wait(), ["file-top.csv"]); }) ); it( "watches multiple files", - withTemporyWatcher("files.md", ["files.md", "subsection/file-sub.csv"], async (root, wait) => { + withTemporaryWatcher("files.md", ["files.md", "subsection/file-sub.csv"], async (root, wait) => { touch(join(root, "files.md")); touch(join(root, "subsection/file-sub.csv")); assert.deepStrictEqual(await wait(), ["files.md", "subsection/file-sub.csv"]); @@ -24,63 +24,63 @@ describe("FileWatchers.of(loaders, path, names, callback)", () => { ); it( "watches a file generated by a data loader", - withTemporyWatcher("simple.md", ["data.txt.js"], ["data.txt"], async (root, wait) => { + withTemporaryWatcher("simple.md", ["data.txt.js"], ["data.txt"], async (root, wait) => { touch(join(root, "data.txt.js")); assert.deepStrictEqual(await wait(), ["data.txt"]); }) ); it( "watches a file within a static archive", - withTemporyWatcher("zip.md", ["static.zip"], ["static/file.txt"], async (root, wait) => { + withTemporaryWatcher("zip.md", ["static.zip"], ["static/file.txt"], async (root, wait) => { touch(join(root, "static.zip")); assert.deepStrictEqual(await wait(), ["static/file.txt"]); }) ); it( "watches a file within an archive created by a data loader", - withTemporyWatcher("zip.md", ["dynamic.zip.sh"], ["dynamic/file.txt"], async (root, wait) => { + withTemporaryWatcher("zip.md", ["dynamic.zip.sh"], ["dynamic/file.txt"], async (root, wait) => { touch(join(root, "dynamic.zip.sh")); assert.deepStrictEqual(await wait(), ["dynamic/file.txt"]); }) ); it( "deduplicates watched files", - withTemporyWatcher("files.md", ["file-top.csv", "file-top.csv"], async (root, wait) => { + withTemporaryWatcher("files.md", ["file-top.csv", "file-top.csv"], async (root, wait) => { touch(join(root, "file-top.csv")); assert.deepStrictEqual(await wait(), ["file-top.csv"]); }) ); it( "deduplicates watched files based on name, not normalized path", - withTemporyWatcher("files.md", ["file-top.csv", "./file-top.csv"], async (root, wait) => { + withTemporaryWatcher("files.md", ["file-top.csv", "./file-top.csv"], async (root, wait) => { touch(join(root, "file-top.csv")); assert.deepStrictEqual(await wait(), ["./file-top.csv", "file-top.csv"]); }) ); it( "resolves relative paths", - withTemporyWatcher("subsection/subfiles.md", ["./file-sub.csv", "../file-top.csv"], async (root, wait) => { + withTemporaryWatcher("subsection/subfiles.md", ["./file-sub.csv", "../file-top.csv"], async (root, wait) => { touch(join(root, "file-top.csv")); assert.deepStrictEqual(await wait(), ["../file-top.csv"]); }) ); it( "resolves absolute paths", - withTemporyWatcher("subsection/subfiles.md", ["/file-top.csv"], async (root, wait) => { + withTemporaryWatcher("subsection/subfiles.md", ["/file-top.csv"], async (root, wait) => { touch(join(root, "file-top.csv")); assert.deepStrictEqual(await wait(), ["/file-top.csv"]); }) ); it( "ignores missing files", - withTemporyWatcher("files.md", ["file-top.csv"], ["does-not-exist.csv", "file-top.csv"], async (root, wait) => { + withTemporaryWatcher("files.md", ["file-top.csv"], ["does-not-exist.csv", "file-top.csv"], async (root, wait) => { touch(join(root, "file-top.csv")); assert.deepStrictEqual(await wait(), ["file-top.csv"]); }) ); it( "ignores changes that don’t affect the modification time", - withTemporyWatcher("files.md", ["file-top.csv"], async (root, wait) => { + withTemporaryWatcher("files.md", ["file-top.csv"], async (root, wait) => { const then = new Date(); touch(join(root, "file-top.csv"), then); assert.deepStrictEqual(await wait(), ["file-top.csv"]); @@ -90,14 +90,14 @@ describe("FileWatchers.of(loaders, path, names, callback)", () => { ); it( "ignores changes to empty files", - withTemporyWatcher("comment.md", ["empty.js"], async (root, wait) => { + withTemporaryWatcher("comment.md", ["empty.js"], async (root, wait) => { touch(join(root, "empty.js")); assert.deepStrictEqual(await wait(10), []); }) ); it( "handles a file being renamed", - withTemporyWatcher("files.md", ["temp1.csv"], async (root, wait) => { + withTemporaryWatcher("files.md", ["temp1.csv"], async (root, wait) => { // First rename the file, while writing a new file to the same place. renameSync(join(root, "temp1.csv"), join(root, "temp2.csv")); writeFileSync(join(root, "temp1.csv"), "hello 2", "utf-8"); @@ -110,7 +110,7 @@ describe("FileWatchers.of(loaders, path, names, callback)", () => { ); it( "handles a file being renamed and removed", - withTemporyWatcher("files.md", ["file-top.csv", "temp3.csv"], async (root, wait) => { + withTemporaryWatcher("files.md", ["file-top.csv", "temp3.csv"], async (root, wait) => { // First delete the temp file. We don’t care if this is reported as a change or not. unlinkSync(join(root, "temp3.csv")); await pause(); @@ -122,18 +122,18 @@ describe("FileWatchers.of(loaders, path, names, callback)", () => { ); }); -function withTemporyWatcher( +function withTemporaryWatcher( path: string, paths: string[], // paths to create and watch run: (root: string, wait: (delay?: number) => Promise) => Promise ): () => Promise; -function withTemporyWatcher( +function withTemporaryWatcher( path: string, paths: string[], // paths to create watchPaths: string[], // paths to watch run: (root: string, wait: (delay?: number) => Promise) => Promise ): () => Promise; -function withTemporyWatcher(...args: any): () => Promise { +function withTemporaryWatcher(...args: any): () => Promise { const [path, paths, watchPaths = paths, run]: [ path: string, paths: string[], From 2444d948f1ed25adea217802b8c2833f5b81b71e Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sat, 28 Mar 2026 23:12:47 -0400 Subject: [PATCH 25/27] spelling: the Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- docs/inputs/checkbox.md | 2 +- examples/markdown-it-footnote/src/index.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/inputs/checkbox.md b/docs/inputs/checkbox.md index bd5711b38..beb4ee8b0 100644 --- a/docs/inputs/checkbox.md +++ b/docs/inputs/checkbox.md @@ -103,7 +103,7 @@ const size2 = view( size2 ``` -Passing a Map to checkbox is especially useful in conjunction with [d3.group](https://d3js.org/d3-array/group). For example, given a the sample `olympians` dataset of Olympic athletes, we can use d3.group to group them by gold medal count, and then checkbox to select the athletes for the chosen count. Note that the value of the checkbox will be an array of arrays, since d3.group returns a Map from key to array; use [*array*.flat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat) to merge these arrays if desired. +Passing a Map to checkbox is especially useful in conjunction with [d3.group](https://d3js.org/d3-array/group). For example, given the sample `olympians` dataset of Olympic athletes, we can use d3.group to group them by gold medal count, and then checkbox to select the athletes for the chosen count. Note that the value of the checkbox will be an array of arrays, since d3.group returns a Map from key to array; use [*array*.flat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat) to merge these arrays if desired. ```js echo const goldAthletes = view( diff --git a/examples/markdown-it-footnote/src/index.md b/examples/markdown-it-footnote/src/index.md index 80e9b4e3a..a3fd3c7c0 100644 --- a/examples/markdown-it-footnote/src/index.md +++ b/examples/markdown-it-footnote/src/index.md @@ -37,7 +37,7 @@ And here is how you can define the footnotes. belong to the previous footnote. ``` -Footnotes always appear at the bottom of the page, regardless of where they are defined. The remaining text is gibberish so that the page is taller, allowing you to try clicking on the footnote references to scroll down and then clicking on ther return link to scroll back up again. +Footnotes always appear at the bottom of the page, regardless of where they are defined. The remaining text is gibberish so that the page is taller, allowing you to try clicking on the footnote references to scroll down and then clicking on the return link to scroll back up again. Aliquam porta accumsan eros, ut posuere lorem congue at. Cras lobortis metus sit amet ex ullamcorper lobortis. Donec vitae nulla dictum, cursus nunc auctor, facilisis tellus. Morbi iaculis ex sed nisi tristique, a auctor elit suscipit. Vestibulum varius, massa in laoreet facilisis, quam arcu dictum metus, sit amet ultricies erat metus non elit. Quisque fringilla gravida sapien non facilisis. Aliquam a ligula vitae tellus rutrum tincidunt. Integer mattis suscipit ex vel egestas. Aenean pharetra sit amet tellus ac tempus. From b3b63756b61f4ebe67768568e9c6d39be97955d6 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sat, 28 Mar 2026 23:12:04 -0400 Subject: [PATCH 26/27] spelling: typescript Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- test/deferred.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/deferred.ts b/test/deferred.ts index e4307395d..929358a86 100644 --- a/test/deferred.ts +++ b/test/deferred.ts @@ -5,7 +5,7 @@ export class Deferred { constructor() { // The Promise constructor will re-set these before they can be observed, - // and so they can never be called. Typescript doesn't know that though, so + // and so they can never be called. TypeScript doesn't know that though, so // assign throw-away functions. These throw errors in case something goes // wrong in the future. this.resolve = () => { From 10ffc95004cc06c089a71de5089d583cebeb0011 Mon Sep 17 00:00:00 2001 From: Josh Soref <2119212+jsoref@users.noreply.github.com> Date: Sun, 29 Mar 2026 14:12:47 -0400 Subject: [PATCH 27/27] spelling: well-formed Signed-off-by: Josh Soref <2119212+jsoref@users.noreply.github.com> --- test/input/{wellformed-block.md => well-formed-block.md} | 0 test/output/{wellformed-block.html => well-formed-block.html} | 0 .../{wellformed-block.md.json => well-formed-block.md.json} | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) rename test/input/{wellformed-block.md => well-formed-block.md} (100%) rename test/output/{wellformed-block.html => well-formed-block.html} (100%) rename test/output/{wellformed-block.md.json => well-formed-block.md.json} (70%) diff --git a/test/input/wellformed-block.md b/test/input/well-formed-block.md similarity index 100% rename from test/input/wellformed-block.md rename to test/input/well-formed-block.md diff --git a/test/output/wellformed-block.html b/test/output/well-formed-block.html similarity index 100% rename from test/output/wellformed-block.html rename to test/output/well-formed-block.html diff --git a/test/output/wellformed-block.md.json b/test/output/well-formed-block.md.json similarity index 70% rename from test/output/wellformed-block.md.json rename to test/output/well-formed-block.md.json index 073862e44..2a1ab0553 100644 --- a/test/output/wellformed-block.md.json +++ b/test/output/well-formed-block.md.json @@ -3,5 +3,5 @@ "title": "Well-formed block", "style": null, "code": [], - "path": "wellformed-block.md" + "path": "well-formed-block.md" } \ No newline at end of file