From e5206b60aa3f054d753f2561f03b29fc75839977 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 3 Jan 2024 16:38:58 +0100 Subject: [PATCH 01/41] feat: enhanced images --- .../routes/playground/markdown/+page.markdoc | 5 +- .../src/routes/playground/markdown/image.jpeg | Bin 0 -> 3215 bytes apps/demo/vite.config.ts | 3 +- package-lock.json | 623 +++++++++++++++++- packages/process/package.json | 3 +- packages/process/src/constants.ts | 1 + packages/process/src/renderer.ts | 44 +- packages/process/src/transformer.ts | 36 +- packages/process/src/utils.ts | 4 + 9 files changed, 680 insertions(+), 39 deletions(-) create mode 100644 apps/demo/src/routes/playground/markdown/image.jpeg diff --git a/apps/demo/src/routes/playground/markdown/+page.markdoc b/apps/demo/src/routes/playground/markdown/+page.markdoc index e50b437..a242d16 100644 --- a/apps/demo/src/routes/playground/markdown/+page.markdoc +++ b/apps/demo/src/routes/playground/markdown/+page.markdoc @@ -20,6 +20,9 @@ Lists Code fences ``` +![Images](./image.jpeg?blur=0) +![Images](/favicon.png) + ## Why create Markdoc instead of using an alternative? ### Why not MDX? @@ -28,7 +31,7 @@ Code fences Markdoc uses a fully declarative approach to composition and flow control, where MDX relies on JavaScript and React. This means MDX affords users more power and flexibility, but at the cost of complexity–content can quickly become as complex as regular code, which can lead to maintainability complications or a more difficult authoring environment. -One of the key motivations for creating Markdoc at Stripe was to create a format that is optimized for writing rather than programming so that we could overcome the challenges that resulted from mixing code and content in our legacy documentation platform. With Markdoc, contributors can iterate quickly without having to subject their edits to a code review and the standard of technical scrutiny that we would have to apply to a format that supports embedded JavaScript. Markdoc also helps us enforce stronger controls around presentation and page logic, avoiding situations in which one-off hacks and procedural content generation introduce bugs and unpredictable behavior. +One of the key motivations for creating Markdoc at Stripe was to create a format that is optimized for writing rather than programming so that we could overcome the challenges that resulted from mixing code and content in our legacy documentation platform. With Markdoc, contributors can iterate quickly without having to subject their edits to a code review and the standard of technical scrutiny that we would have to apply to a format that supports embedded JavaScript. Markdoc also helps us enforce stronger controls around presentation and page logic, avoiding situations in which one-off hacks and procedural content generation introduce bugs and unpredictable behavior. Markdoc's first-class, declarative tag syntax integrates seamlessly with Markdown content and can make it simpler to handle content transforms, static analysis, and validation in a unified, lightweight manner. In MDX, some of these tasks require operating on a more complicated JavaScript AST and accounting for the full spectrum of JavaScript language features. MDX also has a significantly larger runtime dependency footprint and relies on a JavaScript parser to handle the embedded logic. diff --git a/apps/demo/src/routes/playground/markdown/image.jpeg b/apps/demo/src/routes/playground/markdown/image.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..52ec3dda4d6234b1e88ee54df318859f33c2eae6 GIT binary patch literal 3215 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 YAahlN{QgviVkCDKQPH8ezHoE!zZyL&VgLXD literal 0 HcmV?d00001 diff --git a/apps/demo/vite.config.ts b/apps/demo/vite.config.ts index b109c7d..6ca845f 100644 --- a/apps/demo/vite.config.ts +++ b/apps/demo/vite.config.ts @@ -1,6 +1,7 @@ import { sveltekit } from '@sveltejs/kit/vite'; +import { enhancedImages } from '@sveltejs/enhanced-img'; import { defineConfig } from 'vite'; export default defineConfig({ - plugins: [sveltekit()], + plugins: [enhancedImages(), sveltekit()], }); diff --git a/package-lock.json b/package-lock.json index fb885af..e01075d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -97,6 +97,15 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@emnapi/runtime": { + "version": "0.44.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-0.44.0.tgz", + "integrity": "sha512-ZX/etZEZw8DR7zAB1eVQT40lNo0jeqpb6dCgOvctB6FIQ5PoXfMuNY8+ayQfu8tNQbAB8gQWSSJupR8NxeiZXw==", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@esbuild/android-arm": { "version": "0.18.20", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", @@ -625,6 +634,437 @@ "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.1.tgz", + "integrity": "sha512-esr2BZ1x0bo+wl7Gx2hjssYhjrhUsD88VQulI0FrG8/otRQUOxLWHMBd1Y1qo2Gfg2KUvXNpT0ASnV9BzJCexw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.0" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.1.tgz", + "integrity": "sha512-YrnuB3bXuWdG+hJlXtq7C73lF8ampkhU3tMxg5Hh+E7ikxbUVOU9nlNtVTloDXz6pRHt2y2oKJq7DY/yt+UXYw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.0" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.0.tgz", + "integrity": "sha512-VzYd6OwnUR81sInf3alj1wiokY50DjsHz5bvfnsFpxs5tqQxESoHtJO6xyksDs3RIkyhMWq2FufXo6GNSU9BMw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "macos": ">=11", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.0.tgz", + "integrity": "sha512-dD9OznTlHD6aovRswaPNEy8dKtSAmNo4++tO7uuR4o5VxbVAOoEQ1uSmN4iFAdQneTHws1lkTZeiXPrcCkh6IA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "macos": ">=10.13", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.0.tgz", + "integrity": "sha512-VwgD2eEikDJUk09Mn9Dzi1OW2OJFRQK+XlBTkUNmAWPrtj8Ly0yq05DFgu1VCMx2/DqCGQVi5A1dM9hTmxf3uw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.0.tgz", + "integrity": "sha512-xTYThiqEZEZc0PRU90yVtM3KE7lw1bKdnDQ9kCTHWbqWyHOe4NpPOtMGy27YnN51q0J5dqRrvicfPbALIOeAZA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.0.tgz", + "integrity": "sha512-o9E46WWBC6JsBlwU4QyU9578G77HBDT1NInd+aERfxeOPbk0qBZHgoDsQmA2v9TbqJRWzoBPx1aLOhprBMgPjw==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.0.tgz", + "integrity": "sha512-naldaJy4hSVhWBgEjfdBY85CAa4UO+W1nx6a1sWStHZ7EUfNiuBTTN2KUYT5dH1+p/xij1t2QSXfCiFJoC5S/Q==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.0.tgz", + "integrity": "sha512-OdorplCyvmSAPsoJLldtLh3nLxRrkAAAOHsGWGDYfN0kh730gifK+UZb3dWORRa6EusNqCTjfXV4GxvgJ/nPDQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.0.tgz", + "integrity": "sha512-FW8iK6rJrg+X2jKD0Ajhjv6y74lToIBEvkZhl42nZt563FfxkCYacrXZtd+q/sRQDypQLzY5WdLkVTbJoPyqNg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.1.tgz", + "integrity": "sha512-Ii4X1vnzzI4j0+cucsrYA5ctrzU9ciXERfJR633S2r39CiD8npqH2GMj63uFZRCFt3E687IenAdbwIpQOJ5BNA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.0" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.1.tgz", + "integrity": "sha512-59B5GRO2d5N3tIfeGHAbJps7cLpuWEQv/8ySd9109ohQ3kzyCACENkFVAnGPX00HwPTQcaBNF7HQYEfZyZUFfw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.0" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.1.tgz", + "integrity": "sha512-tRGrb2pHnFUXpOAj84orYNxHADBDIr0J7rrjwQrTNMQMWA4zy3StKmMvwsI7u3dEZcgwuMMooIIGWEWOjnmG8A==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.28", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.0" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.1.tgz", + "integrity": "sha512-4y8osC0cAc1TRpy02yn5omBeloZZwS62fPZ0WUAYQiLhSFSpWJfY/gMrzKzLcHB9ulUV6ExFiu2elMaixKDbeg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.0" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.1.tgz", + "integrity": "sha512-D3lV6clkqIKUizNS8K6pkuCKNGmWoKlBGh5p0sLO2jQERzbakhu4bVX1Gz+RS4vTZBprKlWaf+/Rdp3ni2jLfA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.0" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.1.tgz", + "integrity": "sha512-LOGKNu5w8uu1evVqUAUKTix2sQu1XDRIYbsi5Q0c/SrXhvJ4QyOx+GaajxmOg5PZSsSnCYPSmhjHHsRBx06/wQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.0" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.1.tgz", + "integrity": "sha512-vWI/sA+0p+92DLkpAMb5T6I8dg4z2vzCUnp8yvxHlwBpzN8CIcO3xlSXrLltSvK6iMsVMNswAv+ub77rsf25lA==", + "cpu": [ + "wasm32" + ], + "optional": true, + "dependencies": { + "@emnapi/runtime": "^0.44.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.1.tgz", + "integrity": "sha512-/xhYkylsKL05R+NXGJc9xr2Tuw6WIVl2lubFJaFYfW4/MQ4J+dgjIo/T4qjNRizrqs/szF/lC9a5+updmY9jaQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.1.tgz", + "integrity": "sha512-XaM69X0n6kTEsp9tVYYLhXdg7Qj32vYJlAKRutxUsm1UlgQNx6BOhHwZPwukCGXBU2+tH87ip2eV1I/E8MQnZg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -747,6 +1187,32 @@ "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==", "dev": true }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, "node_modules/@sveltejs/adapter-auto": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-2.1.1.tgz", @@ -759,6 +1225,16 @@ "@sveltejs/kit": "^1.0.0" } }, + "node_modules/@sveltejs/enhanced-img": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@sveltejs/enhanced-img/-/enhanced-img-0.1.7.tgz", + "integrity": "sha512-7hxH9vcxeEckOT+Iu/jPGrppIORia65BCF0SuJvjSjhOuJsoI0ycPxLLoD7XnOg3zor71gjXl3aPtghvRPucPw==", + "dependencies": { + "magic-string": "^0.30.5", + "svelte-parse-markup": "^0.1.2", + "vite-imagetools": "^6.2.8" + } + }, "node_modules/@sveltejs/kit": { "version": "1.30.3", "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.30.3.tgz", @@ -1692,6 +2168,18 @@ "periscopic": "^3.1.0" } }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -1704,8 +2192,32 @@ "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/commander": { "version": "10.0.1", @@ -1912,6 +2424,14 @@ "node": ">=8" } }, + "node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "engines": { + "node": ">=8" + } + }, "node_modules/devalue": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz", @@ -3012,6 +3532,17 @@ "node": ">=10" } }, + "node_modules/imagetools-core": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/imagetools-core/-/imagetools-core-6.0.3.tgz", + "integrity": "sha512-3J7Dww03g0dZU5NLbuDRqCqH/AnedR0T3mOl7AP0Curqt/OEtghiDw7Py+Dwa17xL7yJ0uemdEutWkOZm6CnaQ==", + "dependencies": { + "sharp": "^0.33.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -3219,6 +3750,11 @@ "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", "dev": true }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -4266,7 +4802,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -4675,7 +5210,7 @@ "version": "3.29.4", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", - "dev": true, + "devOptional": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -4794,7 +5329,6 @@ "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -4809,7 +5343,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -4833,6 +5366,45 @@ "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", "dev": true }, + "node_modules/sharp": { + "version": "0.33.1", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.1.tgz", + "integrity": "sha512-iAYUnOdTqqZDb3QjMneBKINTllCJDZ3em6WaWy7NPECM4aHncvqHRm0v0bN9nqJxMiwamv5KIdauJ6lUzKDpTQ==", + "hasInstallScript": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.2", + "semver": "^7.5.4" + }, + "engines": { + "libvips": ">=8.15.0", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.1", + "@img/sharp-darwin-x64": "0.33.1", + "@img/sharp-libvips-darwin-arm64": "1.0.0", + "@img/sharp-libvips-darwin-x64": "1.0.0", + "@img/sharp-libvips-linux-arm": "1.0.0", + "@img/sharp-libvips-linux-arm64": "1.0.0", + "@img/sharp-libvips-linux-s390x": "1.0.0", + "@img/sharp-libvips-linux-x64": "1.0.0", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.0", + "@img/sharp-libvips-linuxmusl-x64": "1.0.0", + "@img/sharp-linux-arm": "0.33.1", + "@img/sharp-linux-arm64": "0.33.1", + "@img/sharp-linux-s390x": "0.33.1", + "@img/sharp-linux-x64": "0.33.1", + "@img/sharp-linuxmusl-arm64": "0.33.1", + "@img/sharp-linuxmusl-x64": "0.33.1", + "@img/sharp-wasm32": "0.33.1", + "@img/sharp-win32-ia32": "0.33.1", + "@img/sharp-win32-x64": "0.33.1" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4860,6 +5432,14 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, "node_modules/sirv": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", @@ -5154,6 +5734,17 @@ "resolved": "packages/process", "link": true }, + "node_modules/svelte-parse-markup": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/svelte-parse-markup/-/svelte-parse-markup-0.1.2.tgz", + "integrity": "sha512-DycY7DJr7VqofiJ63ut1/NEG92HrWWL56VWITn/cJCu+LlZhMoBkBXT4opUitPEEwbq1nMQbv4vTKUfbOqIW1g==", + "funding": { + "url": "https://bjornlu.com/sponsor" + }, + "peerDependencies": { + "svelte": "^3.0.0 || ^4.0.0" + } + }, "node_modules/svelte-preprocess": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.3.tgz", @@ -5367,7 +5958,7 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "devOptional": true }, "node_modules/turbo": { "version": "1.11.2", @@ -5653,6 +6244,18 @@ } } }, + "node_modules/vite-imagetools": { + "version": "6.2.8", + "resolved": "https://registry.npmjs.org/vite-imagetools/-/vite-imagetools-6.2.8.tgz", + "integrity": "sha512-52r/BvprawSlUXayDn5ncX3mqaoxBbOaYG4eakzwREoCXEOTvp+A4HDXrDoeS6PM9T/3ZH7CqBhgmIYm6B/mpQ==", + "dependencies": { + "@rollup/pluginutils": "^5.0.5", + "imagetools-core": "^6.0.3" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/vitefu": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", @@ -5753,8 +6356,7 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yaml": { "version": "1.10.2", @@ -5791,9 +6393,10 @@ "license": "MIT", "dependencies": { "@markdoc/markdoc": "^0.4.0", + "@sveltejs/enhanced-img": "^0.1.0", "html-escaper": "^3.0.3", "js-yaml": "^4.1.0", - "lovely-logs": "^1.2.2", + "lovely-logs": "^1.2.0", "svelte": "^4.0.0", "typescript": "^5.0.0" }, diff --git a/packages/process/package.json b/packages/process/package.json index 7429901..d9c82d4 100644 --- a/packages/process/package.json +++ b/packages/process/package.json @@ -25,9 +25,10 @@ "license": "MIT", "dependencies": { "@markdoc/markdoc": "^0.4.0", + "@sveltejs/enhanced-img": "^0.1.0", "html-escaper": "^3.0.3", "js-yaml": "^4.1.0", - "lovely-logs": "^1.2.2", + "lovely-logs": "^1.2.0", "svelte": "^4.0.0", "typescript": "^5.0.0" }, diff --git a/packages/process/src/constants.ts b/packages/process/src/constants.ts index bfa63dd..eede904 100644 --- a/packages/process/src/constants.ts +++ b/packages/process/src/constants.ts @@ -1,3 +1,4 @@ +export const IMAGE_PREFIX = 'IMAGE__'; export const IMPORT_PREFIX = 'INTERNAL__'; export const TAGS_IMPORT = `${IMPORT_PREFIX}TAGS`; export const NODES_IMPORT = `${IMPORT_PREFIX}NODES`; diff --git a/packages/process/src/renderer.ts b/packages/process/src/renderer.ts index 895888e..43bee37 100644 --- a/packages/process/src/renderer.ts +++ b/packages/process/src/renderer.ts @@ -1,9 +1,14 @@ import { RenderableTreeNodes, Tag } from '@markdoc/markdoc'; import { sanitize_for_svelte } from './transformer'; import { escape } from 'html-escaper'; -import { IMPORT_PREFIX } from './constants'; +import { IMAGE_PREFIX, IMPORT_PREFIX } from './constants'; +import { createHash } from 'crypto'; +import { is_external_url } from './utils'; -export function render_html(node: RenderableTreeNodes): string { +export function render_html( + node: RenderableTreeNodes, + dependencies: Map, +): string { /** * if the node is a string or number, it's a text node. */ @@ -15,7 +20,7 @@ export function render_html(node: RenderableTreeNodes): string { * if the node is an array, render its items. */ if (Array.isArray(node)) { - return node.map(render_html).join(''); + return node.map((item) => render_html(item, dependencies)).join(''); } /** @@ -28,7 +33,7 @@ export function render_html(node: RenderableTreeNodes): string { const { name, attributes, children = [] } = node; if (!name) { - return render_html(children); + return render_html(children, dependencies); } const is_svelte = is_svelte_component(node); @@ -43,9 +48,24 @@ export function render_html(node: RenderableTreeNodes): string { value, )}`; } else { - output += ` ${key.toLowerCase()}="${sanitize_for_svelte( - escape(String(value)), - )}"`; + if ( + name === 'img' && + key === 'src' && + !is_external_url(value) && + !value.startsWith('/') + ) { + const hash = createHash('sha1').digest('hex'); + const import_name = `${IMAGE_PREFIX}${hash}`; + dependencies.set(import_name, String(value)); + output += ` ${key.toLowerCase()}=${generate_svelte_attribute_value( + import_name, + 'import', + )}`; + } else { + output += ` ${key.toLowerCase()}="${sanitize_for_svelte( + escape(String(value)), + )}"`; + } } } output += '>'; @@ -61,7 +81,7 @@ export function render_html(node: RenderableTreeNodes): string { * render the children if present. */ if (children.length) { - output += render_html(children); + output += render_html(children, dependencies); } /** @@ -95,10 +115,14 @@ function is_svelte_component(node: RenderableTreeNodes): boolean { return Tag.isTag(node) && node.name.startsWith(IMPORT_PREFIX); } -function generate_svelte_attribute_value(value: unknown): string { - switch (typeof value) { +function generate_svelte_attribute_value( + value: unknown, + type?: string, +): string { + switch (type ?? typeof value) { case 'string': return `"${sanitize_for_svelte(escape(String(value)))}"`; + case 'import': case 'number': case 'boolean': return `{${String(value)}}`; diff --git a/packages/process/src/transformer.ts b/packages/process/src/transformer.ts index 6217c96..10e8d77 100644 --- a/packages/process/src/transformer.ts +++ b/packages/process/src/transformer.ts @@ -93,7 +93,7 @@ export function transformer({ /** * add used svelte components to the script tag */ - let dependencies = ''; + let dependencies = new Map(); const tags = prepare_tags(tags_file); const has_tags = Object.keys(tags).length > 0; const nodes = prepare_nodes(nodes_file); @@ -104,30 +104,30 @@ export function transformer({ * add import for tags */ if (tags_file && has_tags) { - dependencies += `import * as ${TAGS_IMPORT} from '${relative_posix_path( - filename, - tags_file, - )}';`; + dependencies.set( + `* as ${TAGS_IMPORT}`, + relative_posix_path(filename, tags_file), + ); } /** * add import for nodes */ if (nodes_file && has_nodes) { - dependencies += `import * as ${NODES_IMPORT} from '${relative_posix_path( - filename, - nodes_file, - )}';`; + dependencies.set( + `* as ${NODES_IMPORT}`, + relative_posix_path(filename, nodes_file), + ); } /** * add import for layout */ if (selected_layout && has_layout) { - dependencies += `import ${LAYOUT_IMPORT} from '${relative_posix_path( - filename, - selected_layout, - )}';`; + dependencies.set( + LAYOUT_IMPORT, + relative_posix_path(filename, selected_layout), + ); } /** @@ -189,7 +189,7 @@ export function transformer({ /** * render to html */ - const code = render_html(nast); + const code = render_html(nast, dependencies); let transformed = ''; @@ -203,8 +203,12 @@ export function transformer({ /** * add all dependencies to the document */ - if (dependencies) { - transformed += ``; + if (dependencies.size > 0) { + transformed += ``; } /** diff --git a/packages/process/src/utils.ts b/packages/process/src/utils.ts index ca4ff38..9b8c9b5 100644 --- a/packages/process/src/utils.ts +++ b/packages/process/src/utils.ts @@ -38,3 +38,7 @@ export function path_exists(path: string): boolean { export function relative_posix_path(from: string, to: string): string { return relative(dirname(from), to).split(sep).join(posix_sep); } + +export function is_external_url(url: string): boolean { + return url.startsWith('http://') || url.startsWith('https://'); +} From e7b341a8bbbc30f0e5ae24743acc271ebd83f533 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 3 Jan 2024 16:46:59 +0100 Subject: [PATCH 02/41] fix: identify relative image paths --- packages/process/src/renderer.ts | 12 +++++------- packages/process/src/utils.ts | 4 ++++ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/process/src/renderer.ts b/packages/process/src/renderer.ts index 43bee37..8cd30b6 100644 --- a/packages/process/src/renderer.ts +++ b/packages/process/src/renderer.ts @@ -3,7 +3,7 @@ import { sanitize_for_svelte } from './transformer'; import { escape } from 'html-escaper'; import { IMAGE_PREFIX, IMPORT_PREFIX } from './constants'; import { createHash } from 'crypto'; -import { is_external_url } from './utils'; +import { is_relative_url } from './utils'; export function render_html( node: RenderableTreeNodes, @@ -48,12 +48,10 @@ export function render_html( value, )}`; } else { - if ( - name === 'img' && - key === 'src' && - !is_external_url(value) && - !value.startsWith('/') - ) { + if (name === 'img' && key === 'src' && is_relative_url(value)) { + /** + * Allow importing relative images and import them via vite. + */ const hash = createHash('sha1').digest('hex'); const import_name = `${IMAGE_PREFIX}${hash}`; dependencies.set(import_name, String(value)); diff --git a/packages/process/src/utils.ts b/packages/process/src/utils.ts index 9b8c9b5..f94a53f 100644 --- a/packages/process/src/utils.ts +++ b/packages/process/src/utils.ts @@ -42,3 +42,7 @@ export function relative_posix_path(from: string, to: string): string { export function is_external_url(url: string): boolean { return url.startsWith('http://') || url.startsWith('https://'); } + +export function is_relative_url(url: string): boolean { + return url.startsWith('./') || url.startsWith('../'); +} From f4cee1cc9343a9ddc1b98a1334f2823bc1672924 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 3 Jan 2024 16:48:32 +0100 Subject: [PATCH 03/41] fix: remove @sveltejs/enhanced-img as dependency --- apps/demo/package.json | 1 + .../routes/playground/markdown/+page.markdoc | 2 +- package-lock.json | 56 ++++++++++++++++--- packages/process/package.json | 1 - 4 files changed, 50 insertions(+), 10 deletions(-) diff --git a/apps/demo/package.json b/apps/demo/package.json index 8f787f3..d0994aa 100644 --- a/apps/demo/package.json +++ b/apps/demo/package.json @@ -15,6 +15,7 @@ "devDependencies": { "@playwright/test": "^1.28.1", "@sveltejs/adapter-auto": "^2.0.0", + "@sveltejs/enhanced-img": "^0.1.0", "@sveltejs/kit": "*", "@typescript-eslint/eslint-plugin": "^6.13.1", "@typescript-eslint/parser": "^6.17.0", diff --git a/apps/demo/src/routes/playground/markdown/+page.markdoc b/apps/demo/src/routes/playground/markdown/+page.markdoc index a242d16..22f79a2 100644 --- a/apps/demo/src/routes/playground/markdown/+page.markdoc +++ b/apps/demo/src/routes/playground/markdown/+page.markdoc @@ -20,7 +20,7 @@ Lists Code fences ``` -![Images](./image.jpeg?blur=0) +![Images](./image.jpeg?blur=10) ![Images](/favicon.png) ## Why create Markdoc instead of using an alternative? diff --git a/package-lock.json b/package-lock.json index e01075d..294aac5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "devDependencies": { "@playwright/test": "^1.28.1", "@sveltejs/adapter-auto": "^2.0.0", + "@sveltejs/enhanced-img": "^0.1.0", "@sveltejs/kit": "*", "@typescript-eslint/eslint-plugin": "^6.13.1", "@typescript-eslint/parser": "^6.17.0", @@ -101,6 +102,7 @@ "version": "0.44.0", "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-0.44.0.tgz", "integrity": "sha512-ZX/etZEZw8DR7zAB1eVQT40lNo0jeqpb6dCgOvctB6FIQ5PoXfMuNY8+ayQfu8tNQbAB8gQWSSJupR8NxeiZXw==", + "dev": true, "optional": true, "dependencies": { "tslib": "^2.4.0" @@ -641,6 +643,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "darwin" @@ -666,6 +669,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "darwin" @@ -691,6 +695,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "darwin" @@ -712,6 +717,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "darwin" @@ -733,6 +739,7 @@ "cpu": [ "arm" ], + "dev": true, "optional": true, "os": [ "linux" @@ -754,6 +761,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -775,6 +783,7 @@ "cpu": [ "s390x" ], + "dev": true, "optional": true, "os": [ "linux" @@ -796,6 +805,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -817,6 +827,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -838,6 +849,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -859,6 +871,7 @@ "cpu": [ "arm" ], + "dev": true, "optional": true, "os": [ "linux" @@ -884,6 +897,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -909,6 +923,7 @@ "cpu": [ "s390x" ], + "dev": true, "optional": true, "os": [ "linux" @@ -934,6 +949,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -959,6 +975,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -984,6 +1001,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -1009,6 +1027,7 @@ "cpu": [ "wasm32" ], + "dev": true, "optional": true, "dependencies": { "@emnapi/runtime": "^0.44.0" @@ -1030,6 +1049,7 @@ "cpu": [ "ia32" ], + "dev": true, "optional": true, "os": [ "win32" @@ -1051,6 +1071,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "win32" @@ -1191,6 +1212,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -1211,7 +1233,8 @@ "node_modules/@rollup/pluginutils/node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true }, "node_modules/@sveltejs/adapter-auto": { "version": "2.1.1", @@ -1229,6 +1252,7 @@ "version": "0.1.7", "resolved": "https://registry.npmjs.org/@sveltejs/enhanced-img/-/enhanced-img-0.1.7.tgz", "integrity": "sha512-7hxH9vcxeEckOT+Iu/jPGrppIORia65BCF0SuJvjSjhOuJsoI0ycPxLLoD7XnOg3zor71gjXl3aPtghvRPucPw==", + "dev": true, "dependencies": { "magic-string": "^0.30.5", "svelte-parse-markup": "^0.1.2", @@ -2172,6 +2196,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dev": true, "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" @@ -2192,12 +2217,14 @@ "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/color-string": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -2207,6 +2234,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -2217,7 +2245,8 @@ "node_modules/color/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/commander": { "version": "10.0.1", @@ -2428,6 +2457,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "dev": true, "engines": { "node": ">=8" } @@ -3536,6 +3566,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/imagetools-core/-/imagetools-core-6.0.3.tgz", "integrity": "sha512-3J7Dww03g0dZU5NLbuDRqCqH/AnedR0T3mOl7AP0Curqt/OEtghiDw7Py+Dwa17xL7yJ0uemdEutWkOZm6CnaQ==", + "dev": true, "dependencies": { "sharp": "^0.33.0" }, @@ -3753,7 +3784,8 @@ "node_modules/is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true }, "node_modules/is-binary-path": { "version": "2.1.0", @@ -4802,6 +4834,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -5210,7 +5243,7 @@ "version": "3.29.4", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", - "devOptional": true, + "dev": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -5329,6 +5362,7 @@ "version": "7.5.4", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -5343,6 +5377,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -5370,6 +5405,7 @@ "version": "0.33.1", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.1.tgz", "integrity": "sha512-iAYUnOdTqqZDb3QjMneBKINTllCJDZ3em6WaWy7NPECM4aHncvqHRm0v0bN9nqJxMiwamv5KIdauJ6lUzKDpTQ==", + "dev": true, "hasInstallScript": true, "dependencies": { "color": "^4.2.3", @@ -5436,6 +5472,7 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, "dependencies": { "is-arrayish": "^0.3.1" } @@ -5738,6 +5775,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/svelte-parse-markup/-/svelte-parse-markup-0.1.2.tgz", "integrity": "sha512-DycY7DJr7VqofiJ63ut1/NEG92HrWWL56VWITn/cJCu+LlZhMoBkBXT4opUitPEEwbq1nMQbv4vTKUfbOqIW1g==", + "dev": true, "funding": { "url": "https://bjornlu.com/sponsor" }, @@ -5958,7 +5996,7 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "devOptional": true + "dev": true }, "node_modules/turbo": { "version": "1.11.2", @@ -6248,6 +6286,7 @@ "version": "6.2.8", "resolved": "https://registry.npmjs.org/vite-imagetools/-/vite-imagetools-6.2.8.tgz", "integrity": "sha512-52r/BvprawSlUXayDn5ncX3mqaoxBbOaYG4eakzwREoCXEOTvp+A4HDXrDoeS6PM9T/3ZH7CqBhgmIYm6B/mpQ==", + "dev": true, "dependencies": { "@rollup/pluginutils": "^5.0.5", "imagetools-core": "^6.0.3" @@ -6356,7 +6395,8 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/yaml": { "version": "1.10.2", @@ -6389,11 +6429,11 @@ } }, "packages/process": { + "name": "svelte-markdoc-preprocess", "version": "1.2.0", "license": "MIT", "dependencies": { "@markdoc/markdoc": "^0.4.0", - "@sveltejs/enhanced-img": "^0.1.0", "html-escaper": "^3.0.3", "js-yaml": "^4.1.0", "lovely-logs": "^1.2.0", diff --git a/packages/process/package.json b/packages/process/package.json index d9c82d4..6234fb5 100644 --- a/packages/process/package.json +++ b/packages/process/package.json @@ -25,7 +25,6 @@ "license": "MIT", "dependencies": { "@markdoc/markdoc": "^0.4.0", - "@sveltejs/enhanced-img": "^0.1.0", "html-escaper": "^3.0.3", "js-yaml": "^4.1.0", "lovely-logs": "^1.2.0", From 25ab1fc794910d432c6a90ff07ec737e818f323f Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 3 Jan 2024 16:49:32 +0100 Subject: [PATCH 04/41] fix: typo in util --- packages/process/src/renderer.ts | 4 ++-- packages/process/src/utils.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/process/src/renderer.ts b/packages/process/src/renderer.ts index 8cd30b6..8dc11d7 100644 --- a/packages/process/src/renderer.ts +++ b/packages/process/src/renderer.ts @@ -3,7 +3,7 @@ import { sanitize_for_svelte } from './transformer'; import { escape } from 'html-escaper'; import { IMAGE_PREFIX, IMPORT_PREFIX } from './constants'; import { createHash } from 'crypto'; -import { is_relative_url } from './utils'; +import { is_relative_path } from './utils'; export function render_html( node: RenderableTreeNodes, @@ -48,7 +48,7 @@ export function render_html( value, )}`; } else { - if (name === 'img' && key === 'src' && is_relative_url(value)) { + if (name === 'img' && key === 'src' && is_relative_path(value)) { /** * Allow importing relative images and import them via vite. */ diff --git a/packages/process/src/utils.ts b/packages/process/src/utils.ts index f94a53f..50b1c92 100644 --- a/packages/process/src/utils.ts +++ b/packages/process/src/utils.ts @@ -43,6 +43,6 @@ export function is_external_url(url: string): boolean { return url.startsWith('http://') || url.startsWith('https://'); } -export function is_relative_url(url: string): boolean { +export function is_relative_path(url: string): boolean { return url.startsWith('./') || url.startsWith('../'); } From d7cb1c7b3544e91ca98979b16b03fd4fb4d70cfa Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 3 Jan 2024 17:13:02 +0100 Subject: [PATCH 05/41] tests: images relative/absoloute --- packages/process/src/renderer.ts | 7 +++---- packages/process/src/utils.ts | 4 ++-- .../process/tests/processor/images/compiled.txt | 1 + .../process/tests/processor/images/config.mjs | 3 +++ .../process/tests/processor/images/image.jpeg | Bin 0 -> 3215 bytes .../tests/processor/images/source.markdoc | 8 ++++++++ 6 files changed, 17 insertions(+), 6 deletions(-) create mode 100644 packages/process/tests/processor/images/compiled.txt create mode 100644 packages/process/tests/processor/images/config.mjs create mode 100644 packages/process/tests/processor/images/image.jpeg create mode 100644 packages/process/tests/processor/images/source.markdoc diff --git a/packages/process/src/renderer.ts b/packages/process/src/renderer.ts index 8dc11d7..f80e55b 100644 --- a/packages/process/src/renderer.ts +++ b/packages/process/src/renderer.ts @@ -52,11 +52,10 @@ export function render_html( /** * Allow importing relative images and import them via vite. */ - const hash = createHash('sha1').digest('hex'); - const import_name = `${IMAGE_PREFIX}${hash}`; - dependencies.set(import_name, String(value)); + const unique_name = `${IMAGE_PREFIX}${dependencies.size}`; + dependencies.set(unique_name, String(value)); output += ` ${key.toLowerCase()}=${generate_svelte_attribute_value( - import_name, + unique_name, 'import', )}`; } else { diff --git a/packages/process/src/utils.ts b/packages/process/src/utils.ts index 50b1c92..2ec9f59 100644 --- a/packages/process/src/utils.ts +++ b/packages/process/src/utils.ts @@ -43,6 +43,6 @@ export function is_external_url(url: string): boolean { return url.startsWith('http://') || url.startsWith('https://'); } -export function is_relative_path(url: string): boolean { - return url.startsWith('./') || url.startsWith('../'); +export function is_relative_path(path: string): boolean { + return path.startsWith('./') || path.startsWith('../'); } diff --git a/packages/process/tests/processor/images/compiled.txt b/packages/process/tests/processor/images/compiled.txt new file mode 100644 index 0000000..196edf9 --- /dev/null +++ b/packages/process/tests/processor/images/compiled.txt @@ -0,0 +1 @@ +

relative

others

\ No newline at end of file diff --git a/packages/process/tests/processor/images/config.mjs b/packages/process/tests/processor/images/config.mjs new file mode 100644 index 0000000..fc0d6f3 --- /dev/null +++ b/packages/process/tests/processor/images/config.mjs @@ -0,0 +1,3 @@ +import { markdoc } from '../../../dist/module.js'; + +export default markdoc(); diff --git a/packages/process/tests/processor/images/image.jpeg b/packages/process/tests/processor/images/image.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..52ec3dda4d6234b1e88ee54df318859f33c2eae6 GIT binary patch literal 3215 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 YAahlN{QgviVkCDKQPH8ezHoE!zZyL&VgLXD literal 0 HcmV?d00001 diff --git a/packages/process/tests/processor/images/source.markdoc b/packages/process/tests/processor/images/source.markdoc new file mode 100644 index 0000000..34945e7 --- /dev/null +++ b/packages/process/tests/processor/images/source.markdoc @@ -0,0 +1,8 @@ +# relative +![](./image.jpeg) +![](../images/image.jpeg) + +# others +![](image.jpeg) +![](/image.jpeg) +![](https://github.com/logo.jpeg) From a1c5a4837f561349094869a485705ff3e99633e7 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 3 Jan 2024 18:08:03 +0100 Subject: [PATCH 06/41] feat: add img:enhance options --- apps/demo/package.json | 2 +- package-lock.json | 3 +- packages/process/src/config.ts | 9 ++++++ packages/process/src/processor.ts | 3 ++ packages/process/src/renderer.ts | 27 ++++++++++++------ packages/process/src/transformer.ts | 4 ++- packages/process/src/utils.ts | 12 ++++++++ .../compiled.txt | 1 + .../images - enhanced - automatic/config.mjs | 7 +++++ .../images - enhanced - automatic/image.jpeg | Bin 0 -> 3215 bytes .../source.markdoc | 8 ++++++ 11 files changed, 64 insertions(+), 12 deletions(-) create mode 100644 packages/process/tests/processor/images - enhanced - automatic/compiled.txt create mode 100644 packages/process/tests/processor/images - enhanced - automatic/config.mjs create mode 100644 packages/process/tests/processor/images - enhanced - automatic/image.jpeg create mode 100644 packages/process/tests/processor/images - enhanced - automatic/source.markdoc diff --git a/apps/demo/package.json b/apps/demo/package.json index d0994aa..821c957 100644 --- a/apps/demo/package.json +++ b/apps/demo/package.json @@ -15,7 +15,7 @@ "devDependencies": { "@playwright/test": "^1.28.1", "@sveltejs/adapter-auto": "^2.0.0", - "@sveltejs/enhanced-img": "^0.1.0", + "@sveltejs/enhanced-img": "^0.1.7", "@sveltejs/kit": "*", "@typescript-eslint/eslint-plugin": "^6.13.1", "@typescript-eslint/parser": "^6.17.0", diff --git a/package-lock.json b/package-lock.json index 294aac5..0a52d96 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "devDependencies": { "@playwright/test": "^1.28.1", "@sveltejs/adapter-auto": "^2.0.0", - "@sveltejs/enhanced-img": "^0.1.0", + "@sveltejs/enhanced-img": "^0.1.7", "@sveltejs/kit": "*", "@typescript-eslint/eslint-plugin": "^6.13.1", "@typescript-eslint/parser": "^6.17.0", @@ -6441,6 +6441,7 @@ "typescript": "^5.0.0" }, "devDependencies": { + "@sveltejs/enhanced-img": "^0.1.7", "@types/html-escaper": "^3.0.2", "@types/js-yaml": "^4.0.8", "@types/node": "^20.10.6", diff --git a/packages/process/src/config.ts b/packages/process/src/config.ts index 9d92001..e2f0e9a 100644 --- a/packages/process/src/config.ts +++ b/packages/process/src/config.ts @@ -40,4 +40,13 @@ export type Config = { * Configuration for the markdoc compiler. */ config: ConfigType | null; + /** + * Adds support for @sveltejs/enhanced-img + */ + enhancedImages: { + /** + * The mode for enhanced images. 'automatic' will enhance all relative images, 'manually' will only enhance images with the `enhance` query parameter. + */ + mode: 'automatic' | 'manually'; + } | null; }; diff --git a/packages/process/src/processor.ts b/packages/process/src/processor.ts index 0e9687d..dc33f91 100644 --- a/packages/process/src/processor.ts +++ b/packages/process/src/processor.ts @@ -12,6 +12,7 @@ const default_config: Config = { config: null, validationThreshold: 'error', allowComments: false, + enhancedImages: null }; const processor = ({ @@ -24,6 +25,7 @@ const processor = ({ config = default_config.config, validationThreshold = default_config.validationThreshold, allowComments = default_config.allowComments, + enhancedImages = default_config.enhancedImages }: Config = default_config): PreprocessorGroup => { return { name: 'svelte-markdoc-preprocess', @@ -51,6 +53,7 @@ const processor = ({ partials_dir: partials, validation_threshold: validationThreshold, allow_comments: allowComments, + enhanced_images: enhancedImages }); return { diff --git a/packages/process/src/renderer.ts b/packages/process/src/renderer.ts index f80e55b..03f3dc6 100644 --- a/packages/process/src/renderer.ts +++ b/packages/process/src/renderer.ts @@ -2,12 +2,13 @@ import { RenderableTreeNodes, Tag } from '@markdoc/markdoc'; import { sanitize_for_svelte } from './transformer'; import { escape } from 'html-escaper'; import { IMAGE_PREFIX, IMPORT_PREFIX } from './constants'; -import { createHash } from 'crypto'; -import { is_relative_path } from './utils'; +import { is_relative_path, parse_query_params_from_string } from './utils'; +import { Config } from './config'; export function render_html( node: RenderableTreeNodes, dependencies: Map, + enhanced_images: Config['enhancedImages'], ): string { /** * if the node is a string or number, it's a text node. @@ -20,7 +21,9 @@ export function render_html( * if the node is an array, render its items. */ if (Array.isArray(node)) { - return node.map((item) => render_html(item, dependencies)).join(''); + return node + .map((item) => render_html(item, dependencies, enhanced_images)) + .join(''); } /** @@ -33,7 +36,7 @@ export function render_html( const { name, attributes, children = [] } = node; if (!name) { - return render_html(children, dependencies); + return render_html(children, dependencies, enhanced_images); } const is_svelte = is_svelte_component(node); @@ -53,11 +56,17 @@ export function render_html( * Allow importing relative images and import them via vite. */ const unique_name = `${IMAGE_PREFIX}${dependencies.size}`; + const use_enhanced_img_tag = + enhanced_images?.mode === 'automatic' || + (enhanced_images?.mode === 'manually' && + parse_query_params_from_string(String(value)).has( + 'enhance', + )); + if (use_enhanced_img_tag) { + output = output.replace('

others

\ No newline at end of file diff --git a/packages/process/tests/processor/images - enhanced - automatic/config.mjs b/packages/process/tests/processor/images - enhanced - automatic/config.mjs new file mode 100644 index 0000000..b6201da --- /dev/null +++ b/packages/process/tests/processor/images - enhanced - automatic/config.mjs @@ -0,0 +1,7 @@ +import { markdoc } from '../../../dist/module.js'; + +export default markdoc({ + enhancedImages: { + mode: 'automatic' + } +}); diff --git a/packages/process/tests/processor/images - enhanced - automatic/image.jpeg b/packages/process/tests/processor/images - enhanced - automatic/image.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..52ec3dda4d6234b1e88ee54df318859f33c2eae6 GIT binary patch literal 3215 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 YAahlN{QgviVkCDKQPH8ezHoE!zZyL&VgLXD literal 0 HcmV?d00001 diff --git a/packages/process/tests/processor/images - enhanced - automatic/source.markdoc b/packages/process/tests/processor/images - enhanced - automatic/source.markdoc new file mode 100644 index 0000000..34945e7 --- /dev/null +++ b/packages/process/tests/processor/images - enhanced - automatic/source.markdoc @@ -0,0 +1,8 @@ +# relative +![](./image.jpeg) +![](../images/image.jpeg) + +# others +![](image.jpeg) +![](/image.jpeg) +![](https://github.com/logo.jpeg) From 27278432fcb3b1a02881b1bc0b9f009406930f5c Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 3 Jan 2024 18:11:13 +0100 Subject: [PATCH 07/41] test: add test for manual enhancement of images --- packages/process/src/renderer.ts | 2 +- .../images - enhanced - manually/compiled.txt | 1 + .../images - enhanced - manually/config.mjs | 7 +++++++ .../images - enhanced - manually/image.jpeg | Bin 0 -> 3215 bytes .../images - enhanced - manually/source.markdoc | 10 ++++++++++ 5 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 packages/process/tests/processor/images - enhanced - manually/compiled.txt create mode 100644 packages/process/tests/processor/images - enhanced - manually/config.mjs create mode 100644 packages/process/tests/processor/images - enhanced - manually/image.jpeg create mode 100644 packages/process/tests/processor/images - enhanced - manually/source.markdoc diff --git a/packages/process/src/renderer.ts b/packages/process/src/renderer.ts index 03f3dc6..dab8478 100644 --- a/packages/process/src/renderer.ts +++ b/packages/process/src/renderer.ts @@ -60,7 +60,7 @@ export function render_html( enhanced_images?.mode === 'automatic' || (enhanced_images?.mode === 'manually' && parse_query_params_from_string(String(value)).has( - 'enhance', + 'enhanced', )); if (use_enhanced_img_tag) { output = output.replace('import IMAGE__0 from './image.jpeg';import IMAGE__1 from '../images/image.jpeg';import IMAGE__2 from './image.jpeg?enhanced';import IMAGE__3 from '../images/image.jpeg?enhanced';

relative

others

\ No newline at end of file diff --git a/packages/process/tests/processor/images - enhanced - manually/config.mjs b/packages/process/tests/processor/images - enhanced - manually/config.mjs new file mode 100644 index 0000000..b60d8ea --- /dev/null +++ b/packages/process/tests/processor/images - enhanced - manually/config.mjs @@ -0,0 +1,7 @@ +import { markdoc } from '../../../dist/module.js'; + +export default markdoc({ + enhancedImages: { + mode: 'manually' + } +}); diff --git a/packages/process/tests/processor/images - enhanced - manually/image.jpeg b/packages/process/tests/processor/images - enhanced - manually/image.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..52ec3dda4d6234b1e88ee54df318859f33c2eae6 GIT binary patch literal 3215 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 YAahlN{QgviVkCDKQPH8ezHoE!zZyL&VgLXD literal 0 HcmV?d00001 diff --git a/packages/process/tests/processor/images - enhanced - manually/source.markdoc b/packages/process/tests/processor/images - enhanced - manually/source.markdoc new file mode 100644 index 0000000..249ce1d --- /dev/null +++ b/packages/process/tests/processor/images - enhanced - manually/source.markdoc @@ -0,0 +1,10 @@ +# relative +![](./image.jpeg) +![](../images/image.jpeg) +![](./image.jpeg?enhanced) +![](../images/image.jpeg?enhanced) + +# others +![](image.jpeg) +![](/image.jpeg) +![](https://github.com/logo.jpeg) From 360a3f7d3d96d07b8fd93cedb2084f54c4a5b08f Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 3 Jan 2024 18:11:45 +0100 Subject: [PATCH 08/41] chore: run formatter --- packages/process/src/processor.ts | 6 +++--- packages/process/src/renderer.ts | 5 ++++- .../processor/images - enhanced - automatic/config.mjs | 4 ++-- .../tests/processor/images - enhanced - manually/config.mjs | 4 ++-- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/packages/process/src/processor.ts b/packages/process/src/processor.ts index dc33f91..db129d5 100644 --- a/packages/process/src/processor.ts +++ b/packages/process/src/processor.ts @@ -12,7 +12,7 @@ const default_config: Config = { config: null, validationThreshold: 'error', allowComments: false, - enhancedImages: null + enhancedImages: null, }; const processor = ({ @@ -25,7 +25,7 @@ const processor = ({ config = default_config.config, validationThreshold = default_config.validationThreshold, allowComments = default_config.allowComments, - enhancedImages = default_config.enhancedImages + enhancedImages = default_config.enhancedImages, }: Config = default_config): PreprocessorGroup => { return { name: 'svelte-markdoc-preprocess', @@ -53,7 +53,7 @@ const processor = ({ partials_dir: partials, validation_threshold: validationThreshold, allow_comments: allowComments, - enhanced_images: enhancedImages + enhanced_images: enhancedImages, }); return { diff --git a/packages/process/src/renderer.ts b/packages/process/src/renderer.ts index dab8478..400a560 100644 --- a/packages/process/src/renderer.ts +++ b/packages/process/src/renderer.ts @@ -66,7 +66,10 @@ export function render_html( output = output.replace('

others

\ No newline at end of file +

relative

others

\ No newline at end of file diff --git a/packages/process/tests/processor/images - enhanced - manually/compiled.txt b/packages/process/tests/processor/images - enhanced - manually/compiled.txt index 8bf0a49..e985c90 100644 --- a/packages/process/tests/processor/images - enhanced - manually/compiled.txt +++ b/packages/process/tests/processor/images - enhanced - manually/compiled.txt @@ -1 +1 @@ -

relative

others

\ No newline at end of file +

relative

others

\ No newline at end of file diff --git a/packages/process/tests/utils.test.mjs b/packages/process/tests/utils.test.mjs index c018fa6..c53019a 100644 --- a/packages/process/tests/utils.test.mjs +++ b/packages/process/tests/utils.test.mjs @@ -6,9 +6,10 @@ import { get_all_files, path_exists, write_to_file, + replace_query_params_from_string, } from '../dist/utils.js'; -test('relative_posix_path', async () => { +test('relative_posix_path', () => { assert.equal( relative_posix_path('/test/a/b/c', '/test/file.js'), '../../file.js', @@ -69,3 +70,22 @@ test('write_to_file', async (context) => { ); }); }); + +test('replace_query_params_from_string', async (context) => { + await context.test('appending', () => { + const params = new URLSearchParams(); + params.append('enhanced', 'true'); + assert.equal( + replace_query_params_from_string('test', params), + 'test?enhanced=true', + ); + }); + await context.test('replacing', () => { + const params = new URLSearchParams(); + params.append('enhanced', 'true'); + assert.equal( + replace_query_params_from_string('test?param1=1¶m2=2', params), + 'test?enhanced=true', + ); + }); +}); From 66cacca15f62dfe22162d18a924c1fe8ffd6fc6a Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 3 Jan 2024 18:41:39 +0100 Subject: [PATCH 10/41] fix: custom enhacement tag --- apps/demo/svelte.config.js | 3 +++ packages/process/src/renderer.ts | 5 +++-- .../processor/images - enhanced - automatic/compiled.txt | 2 +- .../processor/images - enhanced - manually/compiled.txt | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/apps/demo/svelte.config.js b/apps/demo/svelte.config.js index 965821c..b831431 100644 --- a/apps/demo/svelte.config.js +++ b/apps/demo/svelte.config.js @@ -22,6 +22,9 @@ const config = { default: absoulute('./src/lib/layouts/Default.svelte'), alternative: absoulute('./src/lib/layouts/Alternative.svelte'), }, + enhancedImages: { + mode: 'automatic', + }, }), ], extensions: ['.markdoc', '.svelte'], diff --git a/packages/process/src/renderer.ts b/packages/process/src/renderer.ts index 9b7b9a0..1f538c5 100644 --- a/packages/process/src/renderer.ts +++ b/packages/process/src/renderer.ts @@ -37,7 +37,7 @@ export function render_html( return ''; } - const { name, attributes, children = [] } = node; + let { name, attributes, children = [] } = node; if (!name) { return render_html(children, dependencies, enhanced_images); @@ -66,7 +66,8 @@ export function render_html( (enhanced_images?.mode === 'manually' && params.has('enhanced')); if (use_enhanced_img_tag) { - output = output.replace('import IMAGE__0 from './image.jpeg?enhanced=true';import IMAGE__1 from '../images/image.jpeg?enhanced=true';

relative

others

\ No newline at end of file +

relative

others

\ No newline at end of file diff --git a/packages/process/tests/processor/images - enhanced - manually/compiled.txt b/packages/process/tests/processor/images - enhanced - manually/compiled.txt index e985c90..7f52c7b 100644 --- a/packages/process/tests/processor/images - enhanced - manually/compiled.txt +++ b/packages/process/tests/processor/images - enhanced - manually/compiled.txt @@ -1 +1 @@ -

relative

others

\ No newline at end of file +

relative

others

\ No newline at end of file From 8ef4c231da05ea7e5af29698f9f2fef25c8c0c6a Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Wed, 3 Jan 2024 18:43:29 +0100 Subject: [PATCH 11/41] chore: bump version number --- package-lock.json | 3 +-- packages/process/package.json | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0a52d96..22c8080 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6430,7 +6430,7 @@ }, "packages/process": { "name": "svelte-markdoc-preprocess", - "version": "1.2.0", + "version": "2.0.0-rc.0", "license": "MIT", "dependencies": { "@markdoc/markdoc": "^0.4.0", @@ -6441,7 +6441,6 @@ "typescript": "^5.0.0" }, "devDependencies": { - "@sveltejs/enhanced-img": "^0.1.7", "@types/html-escaper": "^3.0.2", "@types/js-yaml": "^4.0.8", "@types/node": "^20.10.6", diff --git a/packages/process/package.json b/packages/process/package.json index 6234fb5..d8a9187 100644 --- a/packages/process/package.json +++ b/packages/process/package.json @@ -1,6 +1,6 @@ { "name": "svelte-markdoc-preprocess", - "version": "1.2.0", + "version": "2.0.0-rc.0", "description": "A Svelte preprocessor that allows you to use Markdoc.", "type": "commonjs", "keywords": [ From b63bbaa7b259542816cabaa450f883562f6f211a Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Thu, 4 Jan 2024 13:55:51 +0100 Subject: [PATCH 12/41] fix: pass imported images to node as src when relative --- packages/process/src/renderer.ts | 92 +++++++++++------- packages/process/tests/nodes/module.svelte | 1 + .../images - enhanced - automatic/image.jpeg | Bin 3215 -> 0 bytes .../images - enhanced - manually/image.jpeg | Bin 3215 -> 0 bytes .../images - enhanced - node/compiled.txt | 1 + .../images - enhanced - node/config.mjs | 9 ++ .../images - enhanced - node/source.markdoc | 5 + .../process/tests/processor/images/image.jpeg | Bin 3215 -> 0 bytes 8 files changed, 75 insertions(+), 33 deletions(-) delete mode 100644 packages/process/tests/processor/images - enhanced - automatic/image.jpeg delete mode 100644 packages/process/tests/processor/images - enhanced - manually/image.jpeg create mode 100644 packages/process/tests/processor/images - enhanced - node/compiled.txt create mode 100644 packages/process/tests/processor/images - enhanced - node/config.mjs create mode 100644 packages/process/tests/processor/images - enhanced - node/source.markdoc delete mode 100644 packages/process/tests/processor/images/image.jpeg diff --git a/packages/process/src/renderer.ts b/packages/process/src/renderer.ts index 1f538c5..83700c1 100644 --- a/packages/process/src/renderer.ts +++ b/packages/process/src/renderer.ts @@ -1,7 +1,7 @@ import { RenderableTreeNodes, Tag } from '@markdoc/markdoc'; import { sanitize_for_svelte } from './transformer'; import { escape } from 'html-escaper'; -import { IMAGE_PREFIX, IMPORT_PREFIX } from './constants'; +import { IMAGE_PREFIX, IMPORT_PREFIX, NODES_IMPORT } from './constants'; import { is_relative_path, parse_query_params_from_string, @@ -50,40 +50,66 @@ export function render_html( */ let output = `<${name}`; for (const [key, value] of Object.entries(attributes ?? {})) { + const is_imported_image = key === 'src' && is_relative_path(value); if (is_svelte) { - output += ` ${key.toLowerCase()}=${generate_svelte_attribute_value( - value, - )}`; + switch (name.toLowerCase()) { + case `${NODES_IMPORT}.image`.toLowerCase(): + if (is_imported_image) { + const unique_name = `${IMAGE_PREFIX}${dependencies.size}`; + dependencies.set(unique_name, String(value)); + output += ` ${key.toLowerCase()}=${generate_svelte_attribute_value( + unique_name, + 'import', + )}`; + break; + } + + default: + output += ` ${key.toLowerCase()}=${generate_svelte_attribute_value( + value, + )}`; + break; + } } else { - if (name === 'img' && key === 'src' && is_relative_path(value)) { - /** - * Allow importing relative images and import them via vite. - */ - const unique_name = `${IMAGE_PREFIX}${dependencies.size}`; - const params = parse_query_params_from_string(String(value)); - const use_enhanced_img_tag = - enhanced_images?.mode === 'automatic' || - (enhanced_images?.mode === 'manually' && - params.has('enhanced')); - if (use_enhanced_img_tag) { - output = output.replace(' export { default as Heading } from './mock.svelte'; + export { default as Image } from './mock.svelte'; diff --git a/packages/process/tests/processor/images - enhanced - automatic/image.jpeg b/packages/process/tests/processor/images - enhanced - automatic/image.jpeg deleted file mode 100644 index 52ec3dda4d6234b1e88ee54df318859f33c2eae6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3215 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 YAahlN{QgviVkCDKQPH8ezHoE!zZyL&VgLXD diff --git a/packages/process/tests/processor/images - enhanced - manually/image.jpeg b/packages/process/tests/processor/images - enhanced - manually/image.jpeg deleted file mode 100644 index 52ec3dda4d6234b1e88ee54df318859f33c2eae6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3215 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 YAahlN{QgviVkCDKQPH8ezHoE!zZyL&VgLXD diff --git a/packages/process/tests/processor/images - enhanced - node/compiled.txt b/packages/process/tests/processor/images - enhanced - node/compiled.txt new file mode 100644 index 0000000..c624c9e --- /dev/null +++ b/packages/process/tests/processor/images - enhanced - node/compiled.txt @@ -0,0 +1 @@ +

\ No newline at end of file diff --git a/packages/process/tests/processor/images - enhanced - node/config.mjs b/packages/process/tests/processor/images - enhanced - node/config.mjs new file mode 100644 index 0000000..5f3b6c1 --- /dev/null +++ b/packages/process/tests/processor/images - enhanced - node/config.mjs @@ -0,0 +1,9 @@ +import { markdoc } from '../../../dist/module.js'; +import { absoulute } from '../../utils.mjs'; + +export default markdoc({ + nodes: absoulute(import.meta.url, '../../nodes/module.svelte'), + enhancedImages: { + mode: 'automatic', + }, +}); diff --git a/packages/process/tests/processor/images - enhanced - node/source.markdoc b/packages/process/tests/processor/images - enhanced - node/source.markdoc new file mode 100644 index 0000000..4ed0b8d --- /dev/null +++ b/packages/process/tests/processor/images - enhanced - node/source.markdoc @@ -0,0 +1,5 @@ +![](./image.jpeg) +![](../images/image.jpeg) +![](image.jpeg) +![](/image.jpeg) +![](https://github.com/logo.jpeg) diff --git a/packages/process/tests/processor/images/image.jpeg b/packages/process/tests/processor/images/image.jpeg deleted file mode 100644 index 52ec3dda4d6234b1e88ee54df318859f33c2eae6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3215 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 YAahlN{QgviVkCDKQPH8ezHoE!zZyL&VgLXD From 58250a2135d55946c009d84c13a0a53bebc07c45 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Thu, 4 Jan 2024 13:56:44 +0100 Subject: [PATCH 13/41] chore: bump version number --- package-lock.json | 2 +- packages/process/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 22c8080..73091b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6430,7 +6430,7 @@ }, "packages/process": { "name": "svelte-markdoc-preprocess", - "version": "2.0.0-rc.0", + "version": "2.0.0-rc.1", "license": "MIT", "dependencies": { "@markdoc/markdoc": "^0.4.0", diff --git a/packages/process/package.json b/packages/process/package.json index d8a9187..fc8e16b 100644 --- a/packages/process/package.json +++ b/packages/process/package.json @@ -1,6 +1,6 @@ { "name": "svelte-markdoc-preprocess", - "version": "2.0.0-rc.0", + "version": "2.0.0-rc.1", "description": "A Svelte preprocessor that allows you to use Markdoc.", "type": "commonjs", "keywords": [ From 23757008ccc9799edaffbdbba836b0fdf91038cc Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Thu, 4 Jan 2024 14:04:16 +0100 Subject: [PATCH 14/41] fix: pass if image is enhanced or not --- packages/process/src/renderer.ts | 4 ++-- .../tests/processor/images - enhanced - node/compiled.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/process/src/renderer.ts b/packages/process/src/renderer.ts index 83700c1..e3d16e1 100644 --- a/packages/process/src/renderer.ts +++ b/packages/process/src/renderer.ts @@ -57,7 +57,7 @@ export function render_html( if (is_imported_image) { const unique_name = `${IMAGE_PREFIX}${dependencies.size}`; dependencies.set(unique_name, String(value)); - output += ` ${key.toLowerCase()}=${generate_svelte_attribute_value( + output += ` enhanced ${key.toLowerCase()}=${generate_svelte_attribute_value( unique_name, 'import', )}`; @@ -65,7 +65,7 @@ export function render_html( } default: - output += ` ${key.toLowerCase()}=${generate_svelte_attribute_value( + output += ` enhanced={false} ${key.toLowerCase()}=${generate_svelte_attribute_value( value, )}`; break; diff --git a/packages/process/tests/processor/images - enhanced - node/compiled.txt b/packages/process/tests/processor/images - enhanced - node/compiled.txt index c624c9e..48c3434 100644 --- a/packages/process/tests/processor/images - enhanced - node/compiled.txt +++ b/packages/process/tests/processor/images - enhanced - node/compiled.txt @@ -1 +1 @@ -

\ No newline at end of file +

\ No newline at end of file From 4af275b517d126b3d0693fa8a80c25c080dbd2c6 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Thu, 4 Jan 2024 14:08:11 +0100 Subject: [PATCH 15/41] fix: pass imported instead enhanced to image node --- packages/process/src/renderer.ts | 6 ++++-- .../tests/processor/images - enhanced - node/compiled.txt | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/process/src/renderer.ts b/packages/process/src/renderer.ts index e3d16e1..5b1a121 100644 --- a/packages/process/src/renderer.ts +++ b/packages/process/src/renderer.ts @@ -57,15 +57,17 @@ export function render_html( if (is_imported_image) { const unique_name = `${IMAGE_PREFIX}${dependencies.size}`; dependencies.set(unique_name, String(value)); - output += ` enhanced ${key.toLowerCase()}=${generate_svelte_attribute_value( + output += ` imported={true} ${key.toLowerCase()}=${generate_svelte_attribute_value( unique_name, 'import', )}`; break; + } else { + output += ` imported={false}`; } default: - output += ` enhanced={false} ${key.toLowerCase()}=${generate_svelte_attribute_value( + output += ` ${key.toLowerCase()}=${generate_svelte_attribute_value( value, )}`; break; diff --git a/packages/process/tests/processor/images - enhanced - node/compiled.txt b/packages/process/tests/processor/images - enhanced - node/compiled.txt index 48c3434..126d2aa 100644 --- a/packages/process/tests/processor/images - enhanced - node/compiled.txt +++ b/packages/process/tests/processor/images - enhanced - node/compiled.txt @@ -1 +1 @@ -

\ No newline at end of file +

\ No newline at end of file From 7115e6741777e8b2b19a280e1b669f96a008f59e Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Thu, 4 Jan 2024 14:08:36 +0100 Subject: [PATCH 16/41] chore: bump version number --- package-lock.json | 2 +- packages/process/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 73091b3..97755fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6430,7 +6430,7 @@ }, "packages/process": { "name": "svelte-markdoc-preprocess", - "version": "2.0.0-rc.1", + "version": "2.0.0-rc.2", "license": "MIT", "dependencies": { "@markdoc/markdoc": "^0.4.0", diff --git a/packages/process/package.json b/packages/process/package.json index fc8e16b..a34bbf5 100644 --- a/packages/process/package.json +++ b/packages/process/package.json @@ -1,6 +1,6 @@ { "name": "svelte-markdoc-preprocess", - "version": "2.0.0-rc.1", + "version": "2.0.0-rc.2", "description": "A Svelte preprocessor that allows you to use Markdoc.", "type": "commonjs", "keywords": [ From cc32217c10d660f1c43ce3f9885f7e5e3eda3c91 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Thu, 4 Jan 2024 14:18:21 +0100 Subject: [PATCH 17/41] fix: duplicate improted attribute --- packages/process/package.json | 2 +- packages/process/src/renderer.ts | 25 +++++++++++-------- .../images - enhanced - node/compiled.txt | 2 +- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/packages/process/package.json b/packages/process/package.json index a34bbf5..d400805 100644 --- a/packages/process/package.json +++ b/packages/process/package.json @@ -1,6 +1,6 @@ { "name": "svelte-markdoc-preprocess", - "version": "2.0.0-rc.2", + "version": "2.0.0-rc.3", "description": "A Svelte preprocessor that allows you to use Markdoc.", "type": "commonjs", "keywords": [ diff --git a/packages/process/src/renderer.ts b/packages/process/src/renderer.ts index 5b1a121..3f6b546 100644 --- a/packages/process/src/renderer.ts +++ b/packages/process/src/renderer.ts @@ -50,20 +50,23 @@ export function render_html( */ let output = `<${name}`; for (const [key, value] of Object.entries(attributes ?? {})) { - const is_imported_image = key === 'src' && is_relative_path(value); + const is_src_key = key === 'src'; + const is_imported_image = is_src_key && is_relative_path(value); if (is_svelte) { switch (name.toLowerCase()) { case `${NODES_IMPORT}.image`.toLowerCase(): - if (is_imported_image) { - const unique_name = `${IMAGE_PREFIX}${dependencies.size}`; - dependencies.set(unique_name, String(value)); - output += ` imported={true} ${key.toLowerCase()}=${generate_svelte_attribute_value( - unique_name, - 'import', - )}`; - break; - } else { - output += ` imported={false}`; + if (is_src_key) { + if (is_imported_image) { + const unique_name = `${IMAGE_PREFIX}${dependencies.size}`; + dependencies.set(unique_name, String(value)); + output += ` imported={true} ${key.toLowerCase()}=${generate_svelte_attribute_value( + unique_name, + 'import', + )}`; + break; + } else { + output += ` imported={false}`; + } } default: diff --git a/packages/process/tests/processor/images - enhanced - node/compiled.txt b/packages/process/tests/processor/images - enhanced - node/compiled.txt index 126d2aa..69b1e76 100644 --- a/packages/process/tests/processor/images - enhanced - node/compiled.txt +++ b/packages/process/tests/processor/images - enhanced - node/compiled.txt @@ -1 +1 @@ -

\ No newline at end of file +

\ No newline at end of file From 5995fe2f4eff1b2e6d10c1705f0cfe085c784993 Mon Sep 17 00:00:00 2001 From: Conrad Hoang Date: Thu, 4 Jan 2024 08:46:56 -0500 Subject: [PATCH 18/41] feat: support import with default alias --- apps/demo/src/lib/assets/image.jpeg | 1 + .../routes/playground/markdown/+page.markdoc | 1 + packages/process/src/transformer.ts | 27 +++++++------------ packages/process/src/utils.ts | 6 ++++- .../images - enhanced - node/source.markdoc | 1 + 5 files changed, 17 insertions(+), 19 deletions(-) create mode 120000 apps/demo/src/lib/assets/image.jpeg diff --git a/apps/demo/src/lib/assets/image.jpeg b/apps/demo/src/lib/assets/image.jpeg new file mode 120000 index 0000000..89e6065 --- /dev/null +++ b/apps/demo/src/lib/assets/image.jpeg @@ -0,0 +1 @@ +../../routes/playground/markdown/image.jpeg \ No newline at end of file diff --git a/apps/demo/src/routes/playground/markdown/+page.markdoc b/apps/demo/src/routes/playground/markdown/+page.markdoc index 22f79a2..d45f6f2 100644 --- a/apps/demo/src/routes/playground/markdown/+page.markdoc +++ b/apps/demo/src/routes/playground/markdown/+page.markdoc @@ -21,6 +21,7 @@ Code fences ``` ![Images](./image.jpeg?blur=10) +![Images]($lib/assets/image.jpeg) ![Images](/favicon.png) ## Why create Markdoc instead of using an alternative? diff --git a/packages/process/src/transformer.ts b/packages/process/src/transformer.ts index 77d48cb..b8d931f 100644 --- a/packages/process/src/transformer.ts +++ b/packages/process/src/transformer.ts @@ -484,24 +484,15 @@ function each_exported_var(filepath: string): Array<[string, string]> { } function create_schema(tags: Record): void { - // TODO: this part is really ugly, but it works. - const raw = JSON.stringify(tags, (key, value) => { - if (key === 'type') { - switch (true) { - case value === Number: - return '%%NUMBER%%'; - case value === String: - return '%%STRING%%'; - case value === Boolean: - return '%%BOOLEAN%%'; - } - } - return value; - }); - const object = raw - .replaceAll('"%%NUMBER%%"', 'Number') - .replaceAll('"%%STRING%%"', 'String') - .replaceAll('"%%BOOLEAN%%"', 'Boolean'); + // Create schema from the record + // use regex to get the type from the ouput of interface `toString` method` + // and then remove the double quotes from the json + const object = JSON.stringify(tags, (key, value) => + key === 'type' && [Number, String, Boolean].includes(value) + ? (value + '').match(/.*([A-Z].*)\(\).*/)?.pop() ?? value + : value, + ).replaceAll(/"(Number|String|Boolean)"/g, '$1'); + const content = `export default { tags: ${object} };`; const target_directory = join(process.cwd(), '.svelte-kit'); diff --git a/packages/process/src/utils.ts b/packages/process/src/utils.ts index 680f026..b15c917 100644 --- a/packages/process/src/utils.ts +++ b/packages/process/src/utils.ts @@ -44,7 +44,11 @@ export function is_external_url(url: string): boolean { } export function is_relative_path(path: string): boolean { - return path.startsWith('./') || path.startsWith('../'); + return ( + path.startsWith('./') || + path.startsWith('../') || + path.startsWith('$lib') + ); } export function parse_query_params_from_string( diff --git a/packages/process/tests/processor/images - enhanced - node/source.markdoc b/packages/process/tests/processor/images - enhanced - node/source.markdoc index 4ed0b8d..5f5b3eb 100644 --- a/packages/process/tests/processor/images - enhanced - node/source.markdoc +++ b/packages/process/tests/processor/images - enhanced - node/source.markdoc @@ -1,3 +1,4 @@ +![]($lib/assets/image.jpeg) ![](./image.jpeg) ![](../images/image.jpeg) ![](image.jpeg) From bec6b36b7bbbb9e56a5a7b5fd4886feeaf40a5d4 Mon Sep 17 00:00:00 2001 From: Conrad Hoang Date: Thu, 4 Jan 2024 11:18:57 -0500 Subject: [PATCH 19/41] fix: support import with alias --- apps/demo/src/routes/playground/markdown/+page.markdoc | 3 ++- apps/demo/svelte.config.js | 3 +++ packages/process/src/utils.ts | 10 +++++----- .../processor/images - enhanced - node/source.markdoc | 1 + 4 files changed, 11 insertions(+), 6 deletions(-) diff --git a/apps/demo/src/routes/playground/markdown/+page.markdoc b/apps/demo/src/routes/playground/markdown/+page.markdoc index d45f6f2..1864e5a 100644 --- a/apps/demo/src/routes/playground/markdown/+page.markdoc +++ b/apps/demo/src/routes/playground/markdown/+page.markdoc @@ -21,7 +21,8 @@ Code fences ``` ![Images](./image.jpeg?blur=10) -![Images]($lib/assets/image.jpeg) +![Images]($lib/assets/image.jpeg?grayscale) +![Images](assets/image.jpeg?flip) ![Images](/favicon.png) ## Why create Markdoc instead of using an alternative? diff --git a/apps/demo/svelte.config.js b/apps/demo/svelte.config.js index b831431..21bb28f 100644 --- a/apps/demo/svelte.config.js +++ b/apps/demo/svelte.config.js @@ -33,6 +33,9 @@ const config = { // If your environment is not supported or you settled on a specific environment, switch out the adapter. // See https://kit.svelte.dev/docs/adapters for more information about adapters. adapter: adapter(), + alias: { + assets: 'src/lib/assets', + }, }, }; diff --git a/packages/process/src/utils.ts b/packages/process/src/utils.ts index b15c917..cb42d32 100644 --- a/packages/process/src/utils.ts +++ b/packages/process/src/utils.ts @@ -43,12 +43,12 @@ export function is_external_url(url: string): boolean { return url.startsWith('http://') || url.startsWith('https://'); } +export function is_absolute_path(url: string): boolean { + return url.startsWith('/'); +} + export function is_relative_path(path: string): boolean { - return ( - path.startsWith('./') || - path.startsWith('../') || - path.startsWith('$lib') - ); + return !(is_absolute_path(path) || is_external_url(path)); } export function parse_query_params_from_string( diff --git a/packages/process/tests/processor/images - enhanced - node/source.markdoc b/packages/process/tests/processor/images - enhanced - node/source.markdoc index 5f5b3eb..8c552ee 100644 --- a/packages/process/tests/processor/images - enhanced - node/source.markdoc +++ b/packages/process/tests/processor/images - enhanced - node/source.markdoc @@ -1,4 +1,5 @@ ![]($lib/assets/image.jpeg) +![](assets/image.jpeg) ![](./image.jpeg) ![](../images/image.jpeg) ![](image.jpeg) From 025e2fd99b24e43a44c01b7cc268a62b58c0a693 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Thu, 11 Jan 2024 17:42:06 +0100 Subject: [PATCH 20/41] ci: run on any branch --- .github/workflows/test.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2bc48a8..6c4b351 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -5,9 +5,9 @@ name: Tests on: push: - branches: [ "main" ] + branches: [ "**" ] pull_request: - branches: [ "main" ] + branches: [ "**" ] jobs: tests: @@ -26,4 +26,4 @@ jobs: - run: npm ci - run: npm run build - run: npx playwright install - - run: npm test \ No newline at end of file + - run: npm test From d6f9236909e8417e4e66dfbb1ab2a3314269a674 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Thu, 11 Jan 2024 17:44:04 +0100 Subject: [PATCH 21/41] ci: dont run on push --- .github/workflows/test.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 6c4b351..f8a8d0b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -4,8 +4,6 @@ name: Tests on: - push: - branches: [ "**" ] pull_request: branches: [ "**" ] From 96ddba0adcfbc948bc26517c4734837b8fec2d61 Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Thu, 11 Jan 2024 17:54:31 +0100 Subject: [PATCH 22/41] tests: fix tests for more cases --- package-lock.json | 2 +- .../tests/processor/images - enhanced - automatic/compiled.txt | 2 +- .../tests/processor/images - enhanced - manually/compiled.txt | 2 +- .../tests/processor/images - enhanced - node/compiled.txt | 2 +- packages/process/tests/processor/images/compiled.txt | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 97755fe..f48797a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6430,7 +6430,7 @@ }, "packages/process": { "name": "svelte-markdoc-preprocess", - "version": "2.0.0-rc.2", + "version": "2.0.0-rc.3", "license": "MIT", "dependencies": { "@markdoc/markdoc": "^0.4.0", diff --git a/packages/process/tests/processor/images - enhanced - automatic/compiled.txt b/packages/process/tests/processor/images - enhanced - automatic/compiled.txt index 545b726..4f2b1d9 100644 --- a/packages/process/tests/processor/images - enhanced - automatic/compiled.txt +++ b/packages/process/tests/processor/images - enhanced - automatic/compiled.txt @@ -1 +1 @@ -

relative

others

\ No newline at end of file +

relative

others

\ No newline at end of file diff --git a/packages/process/tests/processor/images - enhanced - manually/compiled.txt b/packages/process/tests/processor/images - enhanced - manually/compiled.txt index 7f52c7b..705ab2f 100644 --- a/packages/process/tests/processor/images - enhanced - manually/compiled.txt +++ b/packages/process/tests/processor/images - enhanced - manually/compiled.txt @@ -1 +1 @@ -

relative

others

\ No newline at end of file +

relative

others

\ No newline at end of file diff --git a/packages/process/tests/processor/images - enhanced - node/compiled.txt b/packages/process/tests/processor/images - enhanced - node/compiled.txt index 69b1e76..1913d7a 100644 --- a/packages/process/tests/processor/images - enhanced - node/compiled.txt +++ b/packages/process/tests/processor/images - enhanced - node/compiled.txt @@ -1 +1 @@ -

\ No newline at end of file +

\ No newline at end of file diff --git a/packages/process/tests/processor/images/compiled.txt b/packages/process/tests/processor/images/compiled.txt index 196edf9..2400485 100644 --- a/packages/process/tests/processor/images/compiled.txt +++ b/packages/process/tests/processor/images/compiled.txt @@ -1 +1 @@ -

relative

others

\ No newline at end of file +

relative

others

\ No newline at end of file From 57a725a818978222280e043ba2a4e714f57a93ca Mon Sep 17 00:00:00 2001 From: Torsten Dittmann Date: Tue, 16 Jan 2024 11:16:55 +0100 Subject: [PATCH 23/41] chore: bump version --- apps/demo/src/routes/+layout.svelte | 1 - package-lock.json | 2 +- packages/process/package.json | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/apps/demo/src/routes/+layout.svelte b/apps/demo/src/routes/+layout.svelte index aba1751..912838d 100644 --- a/apps/demo/src/routes/+layout.svelte +++ b/apps/demo/src/routes/+layout.svelte @@ -38,7 +38,6 @@ >Close menu -