From 395e072ee546b8a270da1982125aba4cdb470d86 Mon Sep 17 00:00:00 2001 From: olayway Date: Tue, 6 Jun 2023 15:54:22 +0200 Subject: [PATCH] [packages][m]: mv @flowershow/remark-embed here --- packages/remark-embed/.babelrc | 4 ++ packages/remark-embed/.eslintrc.json | 18 ++++++ packages/remark-embed/README.md | 3 + packages/remark-embed/jest.config.ts | 16 +++++ packages/remark-embed/package.json | 36 +++++++++++ packages/remark-embed/project.json | 61 +++++++++++++++++++ packages/remark-embed/src/index.ts | 1 + packages/remark-embed/src/lib/remark-embed.ts | 49 +++++++++++++++ packages/remark-embed/tsconfig.json | 13 ++++ packages/remark-embed/tsconfig.lib.json | 15 +++++ packages/remark-embed/tsconfig.spec.json | 21 +++++++ 11 files changed, 237 insertions(+) create mode 100644 packages/remark-embed/.babelrc create mode 100644 packages/remark-embed/.eslintrc.json create mode 100644 packages/remark-embed/README.md create mode 100644 packages/remark-embed/jest.config.ts create mode 100644 packages/remark-embed/package.json create mode 100644 packages/remark-embed/project.json create mode 100644 packages/remark-embed/src/index.ts create mode 100644 packages/remark-embed/src/lib/remark-embed.ts create mode 100644 packages/remark-embed/tsconfig.json create mode 100644 packages/remark-embed/tsconfig.lib.json create mode 100644 packages/remark-embed/tsconfig.spec.json diff --git a/packages/remark-embed/.babelrc b/packages/remark-embed/.babelrc new file mode 100644 index 00000000..2fdda153 --- /dev/null +++ b/packages/remark-embed/.babelrc @@ -0,0 +1,4 @@ +{ + "presets": ["@babel/preset-env"], + "plugins": ["@babel/plugin-transform-runtime"] +} diff --git a/packages/remark-embed/.eslintrc.json b/packages/remark-embed/.eslintrc.json new file mode 100644 index 00000000..9d9c0db5 --- /dev/null +++ b/packages/remark-embed/.eslintrc.json @@ -0,0 +1,18 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + } + ] +} diff --git a/packages/remark-embed/README.md b/packages/remark-embed/README.md new file mode 100644 index 00000000..b841f4b2 --- /dev/null +++ b/packages/remark-embed/README.md @@ -0,0 +1,3 @@ +# @flowershow/remark-embed + +Converts Youtube link surrounded by newlines in markdown to embedded iframe diff --git a/packages/remark-embed/jest.config.ts b/packages/remark-embed/jest.config.ts new file mode 100644 index 00000000..1fb4f535 --- /dev/null +++ b/packages/remark-embed/jest.config.ts @@ -0,0 +1,16 @@ +/* eslint-disable */ +export default { + displayName: "remark-embed", + preset: "../../jest.preset.js", + globals: { + "ts-jest": { + tsconfig: "/tsconfig.spec.json", + }, + }, + testEnvironment: "node", + transform: { + "^.+\\.[tj]sx?$": "ts-jest", + }, + moduleFileExtensions: ["ts", "tsx", "js", "jsx"], + coverageDirectory: "../../coverage/packages/remark-embed", +}; diff --git a/packages/remark-embed/package.json b/packages/remark-embed/package.json new file mode 100644 index 00000000..06d608db --- /dev/null +++ b/packages/remark-embed/package.json @@ -0,0 +1,36 @@ +{ + "name": "@flowershow/remark-embed", + "version": "1.0.0", + "description": "Converts youtube link in mdx to an iframe embed", + "repository": { + "type": "git", + "url": "git+https://github.com/flowershow/flowershow.git", + "directory": "packages/remark-embed" + }, + "keywords": [ + "remark", + "remark-plugin", + "markdown", + "obsidian" + ], + "author": "Rufus Pollock", + "license": "MIT", + "bugs": { + "url": "https://github.com/flowershow/flowershow/issues" + }, + "homepage": "https://github.com/flowershow/flowershow#readme", + "publishConfig": { + "access": "public" + }, + "dependencies": { + "unist-util-visit": "^4.1.1" + }, + "type": "module", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + } + } +} diff --git a/packages/remark-embed/project.json b/packages/remark-embed/project.json new file mode 100644 index 00000000..298d5d7e --- /dev/null +++ b/packages/remark-embed/project.json @@ -0,0 +1,61 @@ +{ + "name": "remark-embed", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "packages/remark-embed/src", + "projectType": "library", + "targets": { + "lint": { + "executor": "@nrwl/linter:eslint", + "outputs": ["{options.outputFile}"], + "options": { + "lintFilePatterns": ["packages/remark-embed/**/*.ts"] + } + }, + "test": { + "executor": "@nrwl/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "packages/remark-embed/jest.config.ts", + "passWithNoTests": true + } + }, + "build": { + "executor": "@nrwl/web:rollup", + "outputs": ["{options.outputPath}"], + "options": { + "entryFile": "packages/remark-embed/src/index.ts", + "outputPath": "packages/remark-embed/dist", + "compiler": "babel", + "tsConfig": "packages/remark-embed/tsconfig.lib.json", + "project": "packages/remark-embed/package.json", + "format": ["esm", "cjs"], + "external": ["unist-util-visit"], + "generateExportsField": true, + "assets": [ + { + "glob": "packages/remark-embed/README.md", + "input": ".", + "output": "." + } + ] + } + }, + "publish:dry": { + "executor": "nx:run-commands", + "options": { + "commands": ["npm publish --dry-run"], + "parallel": false, + "cwd": "packages/remark-embed/dist" + } + }, + "publish": { + "executor": "nx:run-commands", + "options": { + "commands": ["npm publish"], + "parallel": false, + "cwd": "packages/remark-embed/dist" + } + } + }, + "tags": [] +} diff --git a/packages/remark-embed/src/index.ts b/packages/remark-embed/src/index.ts new file mode 100644 index 00000000..f33f7677 --- /dev/null +++ b/packages/remark-embed/src/index.ts @@ -0,0 +1 @@ +export { default } from "./lib/remark-embed"; diff --git a/packages/remark-embed/src/lib/remark-embed.ts b/packages/remark-embed/src/lib/remark-embed.ts new file mode 100644 index 00000000..14160290 --- /dev/null +++ b/packages/remark-embed/src/lib/remark-embed.ts @@ -0,0 +1,49 @@ +import { visit } from "unist-util-visit"; + +function transformer(tree) { + visit(tree, "paragraph", (node) => { + visit(node, "text", (textNode) => { + if ( + textNode.value.includes("https://www.youtube.com") && + !textNode.value.includes("\n") + ) { + const urlSplit = textNode.value.split(/[=&]+/); + const iframeUrl = `https://www.youtube.com/embed/${urlSplit[1]}`; + Object.assign(node, { + ...node, + type: "element", + data: { + hProperties: { + style: "position:relative;padding-bottom:56.25%", + }, + }, + children: [ + { + ...textNode, + type: "element", + tagName: "iframe", + data: { + hName: "iframe", + hProperties: { + style: + "position:absolute;top:0;left:0;width:100%;height:100%", + src: iframeUrl, + allowfullscreen: true, + frameborder: "0", + allow: + "accelerometer autoplay clipboard-write encrypted-media gyroscope picture-in-picture", + }, + }, + }, + ], + }); + } + }); + }); +} + +function attacher() { + return transformer; +} + +export default attacher; diff --git a/packages/remark-embed/tsconfig.json b/packages/remark-embed/tsconfig.json new file mode 100644 index 00000000..62ebbd94 --- /dev/null +++ b/packages/remark-embed/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/packages/remark-embed/tsconfig.lib.json b/packages/remark-embed/tsconfig.lib.json new file mode 100644 index 00000000..02e91c69 --- /dev/null +++ b/packages/remark-embed/tsconfig.lib.json @@ -0,0 +1,15 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "target": "es2020", + "module": "es2020", + "types": ["node"], + "moduleResolution": "node", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "skipLibCheck": true + }, + "exclude": ["**/*.spec.ts", "**/*.test.ts"], + "include": ["src/**/*.ts"] +} diff --git a/packages/remark-embed/tsconfig.spec.json b/packages/remark-embed/tsconfig.spec.json new file mode 100644 index 00000000..bbb3e0f9 --- /dev/null +++ b/packages/remark-embed/tsconfig.spec.json @@ -0,0 +1,21 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "dist", + "module": "es2020", + "moduleResolution": "node", + "types": ["jest", "node"] + }, + "include": [ + "jest.config.ts", + "**/*.test.ts", + "**/*.spec.ts", + "**/*.test.tsx", + "**/*.spec.tsx", + "**/*.test.js", + "**/*.spec.js", + "**/*.test.jsx", + "**/*.spec.jsx", + "**/*.d.ts" + ] +}