diff --git a/.flowconfig b/.flowconfig index 753684cc4..3616fd530 100644 --- a/.flowconfig +++ b/.flowconfig @@ -32,13 +32,13 @@ module.name_mapper='^lexical/OverflowNode' -> '/packages/lexical/s module.name_mapper='^lexical/ExtendedNodes' -> '/packages/lexical/src/nodes/extended/LexicalExtendedNodes.js' module.name_mapper='^@lexical/list' -> '/packages/lexical-list/src/index.js' +module.name_mapper='^@lexical/file' -> '/packages/lexical-file/src/index.js' module.name_mapper='^@lexical/helpers/selection' -> '/packages/lexical-helpers/src/LexicalSelectionHelpers.js' module.name_mapper='^@lexical/helpers/text' -> '/packages/lexical-helpers/src/LexicalTextHelpers.js' module.name_mapper='^@lexical/helpers/nodes' -> '/packages/lexical-helpers/src/LexicalNodeHelpers.js' module.name_mapper='^@lexical/helpers/elements' -> '/packages/lexical-helpers/src/LexicalElementHelpers.js' module.name_mapper='^@lexical/helpers/events' -> '/packages/lexical-helpers/src/LexicalEventHelpers.js' -module.name_mapper='^@lexical/helpers/file' -> '/packages/lexical-helpers/src/LexicalFileHelpers.js' module.name_mapper='^@lexical/helpers/offsets' -> '/packages/lexical-helpers/src/LexicalOffsetHelpers.js' module.name_mapper='^@lexical/helpers/root' -> '/packages/lexical-helpers/src/LexicalRootHelpers.js' diff --git a/jest.config.js b/jest.config.js index 06240cd6b..1a8c6a112 100644 --- a/jest.config.js +++ b/jest.config.js @@ -21,12 +21,11 @@ module.exports = { }, moduleNameMapper: { '^./dist/(.+)': './src/$1', + '^@lexical/file$': '/packages/lexical-file/src/index.js', '^@lexical/helpers/elements$': '/packages/lexical-helpers/src/LexicalElementHelpers.js', '^@lexical/helpers/events$': '/packages/lexical-helpers/src/LexicalEventHelpers.js', - '^@lexical/helpers/file$': - '/packages/lexical-helpers/src/LexicalFileHelpers.js', '^@lexical/helpers/nodes$': '/packages/lexical-helpers/src/LexicalNodeHelpers.js', '^@lexical/helpers/offsets$': diff --git a/package-lock.json b/package-lock.json index b2b2c5235..6e08ff8ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6873,6 +6873,10 @@ "node": ">= 10.14.2" } }, + "node_modules/@lexical/file": { + "resolved": "packages/lexical-file", + "link": true + }, "node_modules/@lexical/helpers": { "resolved": "packages/lexical-helpers", "link": true @@ -32530,6 +32534,14 @@ "version": "0.1.8", "license": "MIT" }, + "packages/lexical-file": { + "name": "@lexical/file", + "version": "0.1.8", + "license": "MIT", + "peerDependencies": { + "lexical": "0.1.8" + } + }, "packages/lexical-helpers": { "name": "@lexical/helpers", "version": "0.1.8", @@ -32552,6 +32564,7 @@ "dependencies": { "@craco/craco": "6.1.2", "@excalidraw/excalidraw": "latest", + "@lexical/file": "0.1.8", "@lexical/helpers": "0.1.8", "@lexical/list": "0.1.8", "@lexical/react": "0.1.8", @@ -37019,6 +37032,9 @@ "chalk": "^4.0.0" } }, + "@lexical/file": { + "version": "file:packages/lexical-file" + }, "@lexical/helpers": { "version": "file:packages/lexical-helpers" }, @@ -45677,6 +45693,7 @@ "requires": { "@craco/craco": "6.1.2", "@excalidraw/excalidraw": "latest", + "@lexical/file": "0.1.8", "@lexical/helpers": "0.1.8", "@lexical/list": "0.1.8", "@lexical/react": "0.1.8", diff --git a/packages/lexical-file/LexicalFile.js b/packages/lexical-file/LexicalFile.js new file mode 100644 index 000000000..459d56f37 --- /dev/null +++ b/packages/lexical-file/LexicalFile.js @@ -0,0 +1,3 @@ +'use strict'; + +module.exports = require('./dist/LexicalFile.js'); diff --git a/packages/lexical-file/README.md b/packages/lexical-file/README.md new file mode 100644 index 000000000..c59e03ffd --- /dev/null +++ b/packages/lexical-file/README.md @@ -0,0 +1,3 @@ +# `@lexical/file` + +This package contains the functionality for the file import/export feature of Lexical. diff --git a/packages/lexical-file/package.json b/packages/lexical-file/package.json new file mode 100644 index 000000000..b7df8642f --- /dev/null +++ b/packages/lexical-file/package.json @@ -0,0 +1,27 @@ +{ + "name": "@lexical/file", + "author": { + "name": "Dominic Gannaway", + "email": "dg@domgan.com" + }, + "description": "This package provides the file import/export feature for Lexical.", + "keywords": [ + "lexical", + "editor", + "rich-text", + "file", + "import", + "export" + ], + "license": "MIT", + "version": "0.1.8", + "main": "LexicalFile.js", + "peerDependencies": { + "lexical": "0.1.8" + }, + "repository": { + "type": "git", + "url": "https://github.com/facebook/lexical", + "directory": "packages/lexical-file" + } + } diff --git a/packages/lexical-helpers/src/LexicalFileHelpers.js b/packages/lexical-file/src/fileImportExport.js similarity index 100% rename from packages/lexical-helpers/src/LexicalFileHelpers.js rename to packages/lexical-file/src/fileImportExport.js diff --git a/packages/lexical-file/src/index.js b/packages/lexical-file/src/index.js new file mode 100644 index 000000000..886fd36cb --- /dev/null +++ b/packages/lexical-file/src/index.js @@ -0,0 +1,12 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + * + * @flow strict + */ + +import {exportFile,importFile} from './fileImportExport'; + +export {exportFile,importFile}; diff --git a/packages/lexical-playground/package.json b/packages/lexical-playground/package.json index 7054cc3de..b57bee02a 100644 --- a/packages/lexical-playground/package.json +++ b/packages/lexical-playground/package.json @@ -10,6 +10,7 @@ "@lexical/react": "0.1.8", "@lexical/helpers": "0.1.8", "@lexical/list": "0.1.8", + "@lexical/file": "0.1.8", "link-preview-generator": "1.0.7", "@craco/craco": "6.1.2", "@excalidraw/excalidraw": "latest", diff --git a/packages/lexical-playground/src/plugins/ActionsPlugin.js b/packages/lexical-playground/src/plugins/ActionsPlugin.js index aba293993..9224ceecb 100644 --- a/packages/lexical-playground/src/plugins/ActionsPlugin.js +++ b/packages/lexical-playground/src/plugins/ActionsPlugin.js @@ -16,7 +16,7 @@ import {useCallback, useEffect, useState} from 'react'; import {$createStickyNode} from '../nodes/StickyNode'; import {$log, $getRoot} from 'lexical'; import {SUPPORT_SPEECH_RECOGNITION} from './SpeechToTextPlugin'; -import {importFile, exportFile} from '@lexical/helpers/file'; +import {importFile, exportFile} from '@lexical/file'; const EditorPriority: CommandListenerEditorPriority = 0; diff --git a/scripts/build.js b/scripts/build.js index f60008b62..6a0644a84 100644 --- a/scripts/build.js +++ b/scripts/build.js @@ -43,10 +43,12 @@ if (isClean) { fs.removeSync(path.resolve('./packages/lexical-react/dist')); fs.removeSync(path.resolve('./packages/lexical-helpers/dist')); fs.removeSync(path.resolve('./packages/lexical-list/dist')); + fs.removeSync(path.resolve('./packages/lexical-file/dist')); fs.removeSync(path.resolve('./packages/lexical-yjs/dist')); } const wwwMappings = { + '@lexical/file': 'LexicalFile', '@lexical/list': 'LexicalList', '@lexical/yjs': 'LexicalYjs', lexical: 'Lexical', @@ -94,6 +96,7 @@ const externals = [ // is different to that of the OSS version). 'lexical', '@lexical/list', + '@lexical/file', '@lexical/yjs', 'react-dom', 'react', @@ -181,12 +184,6 @@ async function build(name, inputFile, outputFile, isProd) { 'packages/lexical-helpers/src/LexicalEventHelpers', ), }, - { - find: '@lexical/helpers/file', - replacement: path.resolve( - 'packages/lexical-helpers/src/LexicalFileHelpers', - ), - }, { find: '@lexical/helpers/offsets', replacement: path.resolve( @@ -336,6 +333,17 @@ const packages = [ outputPath: './packages/lexical-list/dist/', sourcePath: './packages/lexical-list/src/', }, + { + modules: [ + { + outputFileName: 'LexicalFile', + sourceFileName: 'index.js', + }, + ], + name: 'Lexical File', + outputPath: './packages/lexical-file/dist/', + sourcePath: './packages/lexical-file/src/', + }, { modules: lexicalNodes.map((module) => ({ name: module, diff --git a/scripts/prepare-release.js b/scripts/prepare-release.js index 3c4197e25..0d202d7d0 100644 --- a/scripts/prepare-release.js +++ b/scripts/prepare-release.js @@ -67,9 +67,6 @@ async function prepareLexicalHelpersPackage() { await exec( `mv ./packages/lexical-helpers/npm/LexicalEventHelpers.js ./packages/lexical-helpers/npm/events.js`, ); - await exec( - `mv ./packages/lexical-helpers/npm/LexicalFileHelpers.js ./packages/lexical-helpers/npm/file.js`, - ); await exec( `mv ./packages/lexical-helpers/npm/LexicalOffsetHelpers.js ./packages/lexical-helpers/npm/offsets.js`, ); @@ -122,23 +119,21 @@ async function prepareLexicalYjsPackage() { ); } -async function prepareLexicalListPackage() { - await exec(`rm -rf ./packages/lexical-list/npm`); - await exec(`mkdir ./packages/lexical-list/npm`); - await exec( - `cp -R ./packages/lexical-list/dist/*.js ./packages/lexical-list/npm`, - ); - await exec( - `cp -R ./packages/lexical-list/package.json ./packages/lexical-list/npm`, - ); - await exec(`cp -R LICENSE ./packages/lexical-list/npm`); - await exec( - `cp -R ./packages/lexical-list/README.md ./packages/lexical-list/npm`, - ); +async function prepareLexicalFeaturePackages() { + const packages = ['lexical-list', 'lexical-file']; + for (let i = 0; i < packages.length; i++) { + const pkg = packages[i]; + await exec(`rm -rf ./packages/${pkg}/npm`); + await exec(`mkdir ./packages/${pkg}/npm`); + await exec(`cp -R ./packages/${pkg}/dist/*.js ./packages/${pkg}/npm`); + await exec(`cp -R ./packages/${pkg}/package.json ./packages/${pkg}/npm`); + await exec(`cp -R LICENSE ./packages/${pkg}/npm`); + await exec(`cp -R ./packages/${pkg}/README.md ./packages/${pkg}/npm`); + } } prepareLexicalCorePackage(); prepareLexicalHelpersPackage(); prepareLexicalReactPackage(); prepareLexicalYjsPackage(); -prepareLexicalListPackage(); +prepareLexicalFeaturePackages();