decap-cms-core 2.56.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +22 -0
- package/README.md +9 -0
- package/dist/decap-cms-core.js +47 -0
- package/dist/decap-cms-core.js.LICENSE.txt +109 -0
- package/dist/decap-cms-core.js.map +1 -0
- package/dist/esm/actions/auth.js +118 -0
- package/dist/esm/actions/collections.js +23 -0
- package/dist/esm/actions/config.js +482 -0
- package/dist/esm/actions/deploys.js +89 -0
- package/dist/esm/actions/editorialWorkflow.js +511 -0
- package/dist/esm/actions/entries.js +940 -0
- package/dist/esm/actions/media.js +168 -0
- package/dist/esm/actions/mediaLibrary.js +606 -0
- package/dist/esm/actions/notifications.js +32 -0
- package/dist/esm/actions/search.js +156 -0
- package/dist/esm/actions/status.js +93 -0
- package/dist/esm/actions/waitUntil.js +39 -0
- package/dist/esm/backend.js +1073 -0
- package/dist/esm/bootstrap.js +107 -0
- package/dist/esm/components/App/App.js +301 -0
- package/dist/esm/components/App/Header.js +162 -0
- package/dist/esm/components/App/NotFoundPage.js +27 -0
- package/dist/esm/components/Collection/Collection.js +210 -0
- package/dist/esm/components/Collection/CollectionControls.js +54 -0
- package/dist/esm/components/Collection/CollectionSearch.js +235 -0
- package/dist/esm/components/Collection/CollectionTop.js +77 -0
- package/dist/esm/components/Collection/ControlButton.js +23 -0
- package/dist/esm/components/Collection/Entries/Entries.js +74 -0
- package/dist/esm/components/Collection/Entries/EntriesCollection.js +193 -0
- package/dist/esm/components/Collection/Entries/EntriesSearch.js +117 -0
- package/dist/esm/components/Collection/Entries/EntryCard.js +134 -0
- package/dist/esm/components/Collection/Entries/EntryListing.js +120 -0
- package/dist/esm/components/Collection/FilterControl.js +41 -0
- package/dist/esm/components/Collection/GroupControl.js +41 -0
- package/dist/esm/components/Collection/NestedCollection.js +311 -0
- package/dist/esm/components/Collection/Sidebar.js +102 -0
- package/dist/esm/components/Collection/SortControl.js +67 -0
- package/dist/esm/components/Collection/ViewStyleControl.js +47 -0
- package/dist/esm/components/Editor/Editor.js +479 -0
- package/dist/esm/components/Editor/EditorControlPane/EditorControl.js +393 -0
- package/dist/esm/components/Editor/EditorControlPane/EditorControlPane.js +259 -0
- package/dist/esm/components/Editor/EditorControlPane/Widget.js +355 -0
- package/dist/esm/components/Editor/EditorInterface.js +401 -0
- package/dist/esm/components/Editor/EditorPreviewPane/EditorPreview.js +56 -0
- package/dist/esm/components/Editor/EditorPreviewPane/EditorPreviewContent.js +34 -0
- package/dist/esm/components/Editor/EditorPreviewPane/EditorPreviewPane.js +252 -0
- package/dist/esm/components/Editor/EditorPreviewPane/PreviewHOC.js +39 -0
- package/dist/esm/components/Editor/EditorToolbar.js +551 -0
- package/dist/esm/components/Editor/withWorkflow.js +64 -0
- package/dist/esm/components/EditorWidgets/Unknown/UnknownControl.js +26 -0
- package/dist/esm/components/EditorWidgets/Unknown/UnknownPreview.js +28 -0
- package/dist/esm/components/EditorWidgets/index.js +7 -0
- package/dist/esm/components/MediaLibrary/EmptyMessage.js +30 -0
- package/dist/esm/components/MediaLibrary/MediaLibrary.js +444 -0
- package/dist/esm/components/MediaLibrary/MediaLibraryButtons.js +110 -0
- package/dist/esm/components/MediaLibrary/MediaLibraryCard.js +108 -0
- package/dist/esm/components/MediaLibrary/MediaLibraryCardGrid.js +211 -0
- package/dist/esm/components/MediaLibrary/MediaLibraryHeader.js +40 -0
- package/dist/esm/components/MediaLibrary/MediaLibraryModal.js +163 -0
- package/dist/esm/components/MediaLibrary/MediaLibrarySearch.js +60 -0
- package/dist/esm/components/MediaLibrary/MediaLibraryTop.js +134 -0
- package/dist/esm/components/UI/DragDrop.js +84 -0
- package/dist/esm/components/UI/ErrorBoundary.js +184 -0
- package/dist/esm/components/UI/FileUploadButton.js +34 -0
- package/dist/esm/components/UI/Modal.js +113 -0
- package/dist/esm/components/UI/Notifications.js +74 -0
- package/dist/esm/components/UI/SettingsDropdown.js +118 -0
- package/dist/esm/components/UI/index.js +60 -0
- package/dist/esm/components/Workflow/Workflow.js +144 -0
- package/dist/esm/components/Workflow/WorkflowCard.js +137 -0
- package/dist/esm/components/Workflow/WorkflowList.js +219 -0
- package/dist/esm/constants/collectionTypes.js +10 -0
- package/dist/esm/constants/collectionViews.js +10 -0
- package/dist/esm/constants/commitProps.js +10 -0
- package/dist/esm/constants/configSchema.js +594 -0
- package/dist/esm/constants/fieldInference.js +67 -0
- package/dist/esm/constants/publishModes.js +28 -0
- package/dist/esm/constants/validationErrorTypes.js +13 -0
- package/dist/esm/formats/formats.js +82 -0
- package/dist/esm/formats/frontmatter.js +163 -0
- package/dist/esm/formats/helpers.js +18 -0
- package/dist/esm/formats/json.js +15 -0
- package/dist/esm/formats/toml.js +40 -0
- package/dist/esm/formats/yaml.js +63 -0
- package/dist/esm/index.js +20 -0
- package/dist/esm/integrations/index.js +37 -0
- package/dist/esm/integrations/providers/algolia/implementation.js +184 -0
- package/dist/esm/integrations/providers/assetStore/implementation.js +175 -0
- package/dist/esm/lib/consoleError.js +9 -0
- package/dist/esm/lib/formatters.js +204 -0
- package/dist/esm/lib/i18n.js +381 -0
- package/dist/esm/lib/phrases.js +13 -0
- package/dist/esm/lib/registry.js +322 -0
- package/dist/esm/lib/serializeEntryValues.js +74 -0
- package/dist/esm/lib/textHelper.js +15 -0
- package/dist/esm/lib/urlHelper.js +128 -0
- package/dist/esm/mediaLibrary.js +42 -0
- package/dist/esm/reducers/auth.js +35 -0
- package/dist/esm/reducers/collections.js +424 -0
- package/dist/esm/reducers/combinedReducer.js +19 -0
- package/dist/esm/reducers/config.js +42 -0
- package/dist/esm/reducers/cursors.js +38 -0
- package/dist/esm/reducers/deploys.js +53 -0
- package/dist/esm/reducers/editorialWorkflow.js +98 -0
- package/dist/esm/reducers/entries.js +591 -0
- package/dist/esm/reducers/entryDraft.js +184 -0
- package/dist/esm/reducers/globalUI.js +32 -0
- package/dist/esm/reducers/index.js +84 -0
- package/dist/esm/reducers/integrations.js +68 -0
- package/dist/esm/reducers/mediaLibrary.js +265 -0
- package/dist/esm/reducers/medias.js +76 -0
- package/dist/esm/reducers/notifications.js +36 -0
- package/dist/esm/reducers/search.js +89 -0
- package/dist/esm/reducers/status.js +37 -0
- package/dist/esm/redux/index.js +14 -0
- package/dist/esm/redux/middleware/waitUntilAction.js +56 -0
- package/dist/esm/routing/history.js +21 -0
- package/dist/esm/types/diacritics.d.js +1 -0
- package/dist/esm/types/global.d.js +5 -0
- package/dist/esm/types/immutable.js +5 -0
- package/dist/esm/types/redux.js +16 -0
- package/dist/esm/types/tomlify-j0.4.d.js +1 -0
- package/dist/esm/valueObjects/AssetProxy.js +60 -0
- package/dist/esm/valueObjects/EditorComponent.js +48 -0
- package/dist/esm/valueObjects/Entry.js +27 -0
- package/index.d.ts +587 -0
- package/package.json +102 -0
- package/src/__tests__/backend.spec.js +934 -0
- package/src/actions/__tests__/config.spec.js +1009 -0
- package/src/actions/__tests__/editorialWorkflow.spec.js +216 -0
- package/src/actions/__tests__/entries.spec.js +575 -0
- package/src/actions/__tests__/media.spec.ts +171 -0
- package/src/actions/__tests__/mediaLibrary.spec.js +327 -0
- package/src/actions/__tests__/search.spec.js +209 -0
- package/src/actions/auth.ts +127 -0
- package/src/actions/collections.ts +18 -0
- package/src/actions/config.ts +538 -0
- package/src/actions/deploys.ts +104 -0
- package/src/actions/editorialWorkflow.ts +567 -0
- package/src/actions/entries.ts +1041 -0
- package/src/actions/media.ts +139 -0
- package/src/actions/mediaLibrary.ts +574 -0
- package/src/actions/notifications.ts +36 -0
- package/src/actions/search.ts +194 -0
- package/src/actions/status.ts +99 -0
- package/src/actions/waitUntil.ts +49 -0
- package/src/backend.ts +1342 -0
- package/src/bootstrap.js +102 -0
- package/src/components/App/App.js +280 -0
- package/src/components/App/Header.js +236 -0
- package/src/components/App/NotFoundPage.js +23 -0
- package/src/components/Collection/Collection.js +205 -0
- package/src/components/Collection/CollectionControls.js +58 -0
- package/src/components/Collection/CollectionSearch.js +238 -0
- package/src/components/Collection/CollectionTop.js +81 -0
- package/src/components/Collection/ControlButton.js +27 -0
- package/src/components/Collection/Entries/Entries.js +73 -0
- package/src/components/Collection/Entries/EntriesCollection.js +165 -0
- package/src/components/Collection/Entries/EntriesSearch.js +91 -0
- package/src/components/Collection/Entries/EntryCard.js +167 -0
- package/src/components/Collection/Entries/EntryListing.js +86 -0
- package/src/components/Collection/Entries/__tests__/EntriesCollection.spec.js +155 -0
- package/src/components/Collection/Entries/__tests__/__snapshots__/EntriesCollection.spec.js.snap +49 -0
- package/src/components/Collection/FilterControl.js +39 -0
- package/src/components/Collection/GroupControl.js +39 -0
- package/src/components/Collection/NestedCollection.js +309 -0
- package/src/components/Collection/Sidebar.js +130 -0
- package/src/components/Collection/SortControl.js +68 -0
- package/src/components/Collection/ViewStyleControl.js +50 -0
- package/src/components/Collection/__tests__/Collection.spec.js +75 -0
- package/src/components/Collection/__tests__/NestedCollection.spec.js +442 -0
- package/src/components/Collection/__tests__/Sidebar.spec.js +87 -0
- package/src/components/Collection/__tests__/__snapshots__/Collection.spec.js.snap +144 -0
- package/src/components/Collection/__tests__/__snapshots__/NestedCollection.spec.js.snap +550 -0
- package/src/components/Collection/__tests__/__snapshots__/Sidebar.spec.js.snap +308 -0
- package/src/components/Editor/Editor.js +494 -0
- package/src/components/Editor/EditorControlPane/EditorControl.js +428 -0
- package/src/components/Editor/EditorControlPane/EditorControlPane.js +256 -0
- package/src/components/Editor/EditorControlPane/Widget.js +351 -0
- package/src/components/Editor/EditorInterface.js +434 -0
- package/src/components/Editor/EditorPreviewPane/EditorPreview.js +40 -0
- package/src/components/Editor/EditorPreviewPane/EditorPreviewContent.js +34 -0
- package/src/components/Editor/EditorPreviewPane/EditorPreviewPane.js +278 -0
- package/src/components/Editor/EditorPreviewPane/PreviewHOC.js +33 -0
- package/src/components/Editor/EditorToolbar.js +678 -0
- package/src/components/Editor/__tests__/Editor.spec.js +219 -0
- package/src/components/Editor/__tests__/EditorToolbar.spec.js +120 -0
- package/src/components/Editor/__tests__/__snapshots__/Editor.spec.js.snap +45 -0
- package/src/components/Editor/__tests__/__snapshots__/EditorToolbar.spec.js.snap +4020 -0
- package/src/components/Editor/withWorkflow.js +61 -0
- package/src/components/EditorWidgets/Unknown/UnknownControl.js +17 -0
- package/src/components/EditorWidgets/Unknown/UnknownPreview.js +19 -0
- package/src/components/EditorWidgets/index.js +5 -0
- package/src/components/MediaLibrary/EmptyMessage.js +28 -0
- package/src/components/MediaLibrary/MediaLibrary.js +407 -0
- package/src/components/MediaLibrary/MediaLibraryButtons.js +136 -0
- package/src/components/MediaLibrary/MediaLibraryCard.js +128 -0
- package/src/components/MediaLibrary/MediaLibraryCardGrid.js +199 -0
- package/src/components/MediaLibrary/MediaLibraryHeader.js +48 -0
- package/src/components/MediaLibrary/MediaLibraryModal.js +200 -0
- package/src/components/MediaLibrary/MediaLibrarySearch.js +61 -0
- package/src/components/MediaLibrary/MediaLibraryTop.js +143 -0
- package/src/components/MediaLibrary/__tests__/MediaLibraryButtons.spec.js +45 -0
- package/src/components/MediaLibrary/__tests__/MediaLibraryCard.spec.js +49 -0
- package/src/components/MediaLibrary/__tests__/__snapshots__/MediaLibraryCard.spec.js.snap +216 -0
- package/src/components/UI/DragDrop.js +66 -0
- package/src/components/UI/ErrorBoundary.js +209 -0
- package/src/components/UI/FileUploadButton.js +24 -0
- package/src/components/UI/Modal.js +109 -0
- package/src/components/UI/Notifications.tsx +83 -0
- package/src/components/UI/SettingsDropdown.js +103 -0
- package/src/components/UI/__tests__/ErrorBoundary.spec.js +57 -0
- package/src/components/UI/index.js +6 -0
- package/src/components/Workflow/Workflow.js +166 -0
- package/src/components/Workflow/WorkflowCard.js +177 -0
- package/src/components/Workflow/WorkflowList.js +269 -0
- package/src/constants/__tests__/configSchema.spec.js +511 -0
- package/src/constants/collectionTypes.ts +2 -0
- package/src/constants/collectionViews.js +2 -0
- package/src/constants/commitProps.ts +2 -0
- package/src/constants/configSchema.js +399 -0
- package/src/constants/fieldInference.tsx +78 -0
- package/src/constants/publishModes.ts +22 -0
- package/src/constants/validationErrorTypes.js +6 -0
- package/src/formats/__tests__/frontmatter.spec.js +429 -0
- package/src/formats/__tests__/toml.spec.js +9 -0
- package/src/formats/__tests__/yaml.spec.js +162 -0
- package/src/formats/formats.ts +86 -0
- package/src/formats/frontmatter.ts +150 -0
- package/src/formats/helpers.ts +14 -0
- package/src/formats/json.ts +9 -0
- package/src/formats/toml.ts +33 -0
- package/src/formats/yaml.ts +58 -0
- package/src/index.js +8 -0
- package/src/integrations/index.js +35 -0
- package/src/integrations/providers/algolia/implementation.js +176 -0
- package/src/integrations/providers/assetStore/implementation.js +147 -0
- package/src/lib/__tests__/formatters.spec.js +723 -0
- package/src/lib/__tests__/i18n.spec.js +792 -0
- package/src/lib/__tests__/phrases.spec.js +119 -0
- package/src/lib/__tests__/registry.spec.js +246 -0
- package/src/lib/__tests__/serializeEntryValues.spec.js +22 -0
- package/src/lib/__tests__/urlHelper.spec.js +138 -0
- package/src/lib/consoleError.js +7 -0
- package/src/lib/formatters.ts +267 -0
- package/src/lib/i18n.ts +427 -0
- package/src/lib/phrases.js +8 -0
- package/src/lib/registry.js +282 -0
- package/src/lib/serializeEntryValues.js +75 -0
- package/src/lib/textHelper.js +11 -0
- package/src/lib/urlHelper.ts +125 -0
- package/src/mediaLibrary.ts +51 -0
- package/src/reducers/__tests__/auth.spec.ts +38 -0
- package/src/reducers/__tests__/collections.spec.js +571 -0
- package/src/reducers/__tests__/config.spec.js +38 -0
- package/src/reducers/__tests__/entries.spec.js +694 -0
- package/src/reducers/__tests__/entryDraft.spec.js +198 -0
- package/src/reducers/__tests__/globalUI.js +43 -0
- package/src/reducers/__tests__/integrations.spec.ts +76 -0
- package/src/reducers/__tests__/mediaLibrary.spec.js +154 -0
- package/src/reducers/__tests__/medias.spec.ts +49 -0
- package/src/reducers/auth.ts +46 -0
- package/src/reducers/collections.ts +483 -0
- package/src/reducers/combinedReducer.ts +11 -0
- package/src/reducers/config.ts +38 -0
- package/src/reducers/cursors.js +36 -0
- package/src/reducers/deploys.ts +52 -0
- package/src/reducers/editorialWorkflow.ts +163 -0
- package/src/reducers/entries.ts +806 -0
- package/src/reducers/entryDraft.js +218 -0
- package/src/reducers/globalUI.ts +45 -0
- package/src/reducers/index.ts +82 -0
- package/src/reducers/integrations.ts +59 -0
- package/src/reducers/mediaLibrary.ts +296 -0
- package/src/reducers/medias.ts +66 -0
- package/src/reducers/notifications.ts +53 -0
- package/src/reducers/search.ts +89 -0
- package/src/reducers/status.ts +40 -0
- package/src/redux/index.ts +18 -0
- package/src/redux/middleware/waitUntilAction.ts +64 -0
- package/src/routing/__tests__/history.spec.ts +49 -0
- package/src/routing/history.ts +17 -0
- package/src/types/diacritics.d.ts +1 -0
- package/src/types/global.d.ts +8 -0
- package/src/types/immutable.ts +39 -0
- package/src/types/redux.ts +810 -0
- package/src/types/tomlify-j0.4.d.ts +13 -0
- package/src/valueObjects/AssetProxy.ts +48 -0
- package/src/valueObjects/EditorComponent.js +38 -0
- package/src/valueObjects/Entry.ts +63 -0
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
exports.getBackend = getBackend;
|
|
8
|
+
exports.getEditorComponents = getEditorComponents;
|
|
9
|
+
exports.getEventListeners = getEventListeners;
|
|
10
|
+
exports.getLocale = getLocale;
|
|
11
|
+
exports.getMediaLibrary = getMediaLibrary;
|
|
12
|
+
exports.getPreviewStyles = getPreviewStyles;
|
|
13
|
+
exports.getPreviewTemplate = getPreviewTemplate;
|
|
14
|
+
exports.getRemarkPlugins = getRemarkPlugins;
|
|
15
|
+
exports.getWidget = getWidget;
|
|
16
|
+
exports.getWidgetValueSerializer = getWidgetValueSerializer;
|
|
17
|
+
exports.getWidgets = getWidgets;
|
|
18
|
+
exports.invokeEvent = invokeEvent;
|
|
19
|
+
exports.registerBackend = registerBackend;
|
|
20
|
+
exports.registerEditorComponent = registerEditorComponent;
|
|
21
|
+
exports.registerEventListener = registerEventListener;
|
|
22
|
+
exports.registerLocale = registerLocale;
|
|
23
|
+
exports.registerMediaLibrary = registerMediaLibrary;
|
|
24
|
+
exports.registerPreviewStyle = registerPreviewStyle;
|
|
25
|
+
exports.registerPreviewTemplate = registerPreviewTemplate;
|
|
26
|
+
exports.registerRemarkPlugin = registerRemarkPlugin;
|
|
27
|
+
exports.registerWidget = registerWidget;
|
|
28
|
+
exports.registerWidgetValueSerializer = registerWidgetValueSerializer;
|
|
29
|
+
exports.removeEventListener = removeEventListener;
|
|
30
|
+
exports.resolveWidget = resolveWidget;
|
|
31
|
+
var _immutable = require("immutable");
|
|
32
|
+
var _immer = _interopRequireDefault(require("immer"));
|
|
33
|
+
var _commonTags = require("common-tags");
|
|
34
|
+
var _EditorComponent = _interopRequireDefault(require("../valueObjects/EditorComponent"));
|
|
35
|
+
const _excluded = ["name", "controlComponent", "previewComponent", "schema", "allowMapValue", "globalStyles"];
|
|
36
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
37
|
+
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
|
|
38
|
+
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
|
|
39
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
40
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
41
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
42
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
43
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
44
|
+
const allowedEvents = ['prePublish', 'postPublish', 'preUnpublish', 'postUnpublish', 'preSave', 'postSave'];
|
|
45
|
+
const eventHandlers = {};
|
|
46
|
+
allowedEvents.forEach(e => {
|
|
47
|
+
eventHandlers[e] = [];
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Global Registry Object
|
|
52
|
+
*/
|
|
53
|
+
const registry = {
|
|
54
|
+
backends: {},
|
|
55
|
+
templates: {},
|
|
56
|
+
previewStyles: [],
|
|
57
|
+
widgets: {},
|
|
58
|
+
editorComponents: (0, _immutable.Map)(),
|
|
59
|
+
remarkPlugins: [],
|
|
60
|
+
widgetValueSerializers: {},
|
|
61
|
+
mediaLibraries: [],
|
|
62
|
+
locales: {},
|
|
63
|
+
eventHandlers
|
|
64
|
+
};
|
|
65
|
+
var _default = {
|
|
66
|
+
registerPreviewStyle,
|
|
67
|
+
getPreviewStyles,
|
|
68
|
+
registerPreviewTemplate,
|
|
69
|
+
getPreviewTemplate,
|
|
70
|
+
registerWidget,
|
|
71
|
+
getWidget,
|
|
72
|
+
getWidgets,
|
|
73
|
+
resolveWidget,
|
|
74
|
+
registerEditorComponent,
|
|
75
|
+
getEditorComponents,
|
|
76
|
+
registerRemarkPlugin,
|
|
77
|
+
getRemarkPlugins,
|
|
78
|
+
registerWidgetValueSerializer,
|
|
79
|
+
getWidgetValueSerializer,
|
|
80
|
+
registerBackend,
|
|
81
|
+
getBackend,
|
|
82
|
+
registerMediaLibrary,
|
|
83
|
+
getMediaLibrary,
|
|
84
|
+
registerLocale,
|
|
85
|
+
getLocale,
|
|
86
|
+
registerEventListener,
|
|
87
|
+
removeEventListener,
|
|
88
|
+
getEventListeners,
|
|
89
|
+
invokeEvent
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Preview Styles
|
|
93
|
+
*
|
|
94
|
+
* Valid options:
|
|
95
|
+
* - raw {boolean} if `true`, `style` value is expected to be a CSS string
|
|
96
|
+
*/
|
|
97
|
+
exports.default = _default;
|
|
98
|
+
function registerPreviewStyle(style, opts) {
|
|
99
|
+
registry.previewStyles.push(_objectSpread(_objectSpread({}, opts), {}, {
|
|
100
|
+
value: style
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
function getPreviewStyles() {
|
|
104
|
+
return registry.previewStyles;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Preview Templates
|
|
109
|
+
*/
|
|
110
|
+
function registerPreviewTemplate(name, component) {
|
|
111
|
+
registry.templates[name] = component;
|
|
112
|
+
}
|
|
113
|
+
function getPreviewTemplate(name) {
|
|
114
|
+
return registry.templates[name];
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Editor Widgets
|
|
119
|
+
*/
|
|
120
|
+
function registerWidget(name, control, preview, schema = {}) {
|
|
121
|
+
if (Array.isArray(name)) {
|
|
122
|
+
name.forEach(widget => {
|
|
123
|
+
if (typeof widget !== 'object') {
|
|
124
|
+
console.error(`Cannot register widget: ${widget}`);
|
|
125
|
+
} else {
|
|
126
|
+
registerWidget(widget);
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
} else if (typeof name === 'string') {
|
|
130
|
+
// A registered widget control can be reused by a new widget, allowing
|
|
131
|
+
// multiple copies with different previews.
|
|
132
|
+
const newControl = typeof control === 'string' ? registry.widgets[control].control : control;
|
|
133
|
+
registry.widgets[name] = {
|
|
134
|
+
control: newControl,
|
|
135
|
+
preview,
|
|
136
|
+
schema
|
|
137
|
+
};
|
|
138
|
+
} else if (typeof name === 'object') {
|
|
139
|
+
const {
|
|
140
|
+
name: widgetName,
|
|
141
|
+
controlComponent: control,
|
|
142
|
+
previewComponent: preview,
|
|
143
|
+
schema = {},
|
|
144
|
+
allowMapValue,
|
|
145
|
+
globalStyles
|
|
146
|
+
} = name,
|
|
147
|
+
options = _objectWithoutProperties(name, _excluded);
|
|
148
|
+
if (registry.widgets[widgetName]) {
|
|
149
|
+
console.warn((0, _commonTags.oneLine)`
|
|
150
|
+
Multiple widgets registered with name "${widgetName}". Only the last widget registered with
|
|
151
|
+
this name will be used.
|
|
152
|
+
`);
|
|
153
|
+
}
|
|
154
|
+
if (!control) {
|
|
155
|
+
throw Error(`Widget "${widgetName}" registered without \`controlComponent\`.`);
|
|
156
|
+
}
|
|
157
|
+
registry.widgets[widgetName] = _objectSpread({
|
|
158
|
+
control,
|
|
159
|
+
preview,
|
|
160
|
+
schema,
|
|
161
|
+
globalStyles,
|
|
162
|
+
allowMapValue
|
|
163
|
+
}, options);
|
|
164
|
+
} else {
|
|
165
|
+
console.error('`registerWidget` failed, called with incorrect arguments.');
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
function getWidget(name) {
|
|
169
|
+
return registry.widgets[name];
|
|
170
|
+
}
|
|
171
|
+
function getWidgets() {
|
|
172
|
+
return (0, _immer.default)(Object.entries(registry.widgets), draft => {
|
|
173
|
+
return draft.map(([key, value]) => _objectSpread({
|
|
174
|
+
name: key
|
|
175
|
+
}, value));
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
function resolveWidget(name) {
|
|
179
|
+
return getWidget(name || 'string') || getWidget('unknown');
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* Markdown Editor Custom Components
|
|
184
|
+
*/
|
|
185
|
+
function registerEditorComponent(component) {
|
|
186
|
+
const plugin = (0, _EditorComponent.default)(component);
|
|
187
|
+
if (plugin.type === 'code-block') {
|
|
188
|
+
const codeBlock = registry.editorComponents.find(c => c.type === 'code-block');
|
|
189
|
+
if (codeBlock) {
|
|
190
|
+
console.warn((0, _commonTags.oneLine)`
|
|
191
|
+
Only one editor component of type "code-block" may be registered. Previously registered code
|
|
192
|
+
block component(s) will be overwritten.
|
|
193
|
+
`);
|
|
194
|
+
registry.editorComponents = registry.editorComponents.delete(codeBlock.id);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
registry.editorComponents = registry.editorComponents.set(plugin.id, plugin);
|
|
198
|
+
}
|
|
199
|
+
function getEditorComponents() {
|
|
200
|
+
return registry.editorComponents;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Remark plugins
|
|
205
|
+
*/
|
|
206
|
+
/** @typedef {import('unified').Pluggable} RemarkPlugin */
|
|
207
|
+
/** @type {(plugin: RemarkPlugin) => void} */
|
|
208
|
+
function registerRemarkPlugin(plugin) {
|
|
209
|
+
registry.remarkPlugins.push(plugin);
|
|
210
|
+
}
|
|
211
|
+
/** @type {() => Array<RemarkPlugin>} */
|
|
212
|
+
function getRemarkPlugins() {
|
|
213
|
+
return registry.remarkPlugins;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/**
|
|
217
|
+
* Widget Serializers
|
|
218
|
+
*/
|
|
219
|
+
function registerWidgetValueSerializer(widgetName, serializer) {
|
|
220
|
+
registry.widgetValueSerializers[widgetName] = serializer;
|
|
221
|
+
}
|
|
222
|
+
function getWidgetValueSerializer(widgetName) {
|
|
223
|
+
return registry.widgetValueSerializers[widgetName];
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* Backend API
|
|
228
|
+
*/
|
|
229
|
+
function registerBackend(name, BackendClass) {
|
|
230
|
+
if (!name || !BackendClass) {
|
|
231
|
+
console.error("Backend parameters invalid. example: CMS.registerBackend('myBackend', BackendClass)");
|
|
232
|
+
} else if (registry.backends[name]) {
|
|
233
|
+
console.error(`Backend [${name}] already registered. Please choose a different name.`);
|
|
234
|
+
} else {
|
|
235
|
+
registry.backends[name] = {
|
|
236
|
+
init: (...args) => new BackendClass(...args)
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
function getBackend(name) {
|
|
241
|
+
return registry.backends[name];
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Media Libraries
|
|
246
|
+
*/
|
|
247
|
+
function registerMediaLibrary(mediaLibrary, options) {
|
|
248
|
+
if (registry.mediaLibraries.find(ml => mediaLibrary.name === ml.name)) {
|
|
249
|
+
throw new Error(`A media library named ${mediaLibrary.name} has already been registered.`);
|
|
250
|
+
}
|
|
251
|
+
registry.mediaLibraries.push(_objectSpread(_objectSpread({}, mediaLibrary), {}, {
|
|
252
|
+
options
|
|
253
|
+
}));
|
|
254
|
+
}
|
|
255
|
+
function getMediaLibrary(name) {
|
|
256
|
+
return registry.mediaLibraries.find(ml => ml.name === name);
|
|
257
|
+
}
|
|
258
|
+
function validateEventName(name) {
|
|
259
|
+
if (!allowedEvents.includes(name)) {
|
|
260
|
+
throw new Error(`Invalid event name '${name}'`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
function getEventListeners(name) {
|
|
264
|
+
validateEventName(name);
|
|
265
|
+
return [...registry.eventHandlers[name]];
|
|
266
|
+
}
|
|
267
|
+
function registerEventListener({
|
|
268
|
+
name,
|
|
269
|
+
handler
|
|
270
|
+
}, options = {}) {
|
|
271
|
+
validateEventName(name);
|
|
272
|
+
registry.eventHandlers[name].push({
|
|
273
|
+
handler,
|
|
274
|
+
options
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
async function invokeEvent({
|
|
278
|
+
name,
|
|
279
|
+
data
|
|
280
|
+
}) {
|
|
281
|
+
validateEventName(name);
|
|
282
|
+
const handlers = registry.eventHandlers[name];
|
|
283
|
+
let _data = _objectSpread({}, data);
|
|
284
|
+
for (const {
|
|
285
|
+
handler,
|
|
286
|
+
options
|
|
287
|
+
} of handlers) {
|
|
288
|
+
const result = await handler(_data, options);
|
|
289
|
+
if (result !== undefined) {
|
|
290
|
+
const entry = _data.entry.set('data', result);
|
|
291
|
+
_data = _objectSpread(_objectSpread({}, data), {}, {
|
|
292
|
+
entry
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return _data.entry.get('data');
|
|
297
|
+
}
|
|
298
|
+
function removeEventListener({
|
|
299
|
+
name,
|
|
300
|
+
handler
|
|
301
|
+
}) {
|
|
302
|
+
validateEventName(name);
|
|
303
|
+
if (handler) {
|
|
304
|
+
registry.eventHandlers[name] = registry.eventHandlers[name].filter(item => item.handler !== handler);
|
|
305
|
+
} else {
|
|
306
|
+
registry.eventHandlers[name] = [];
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* Locales
|
|
312
|
+
*/
|
|
313
|
+
function registerLocale(locale, phrases) {
|
|
314
|
+
if (!locale || !phrases) {
|
|
315
|
+
console.error("Locale parameters invalid. example: CMS.registerLocale('locale', phrases)");
|
|
316
|
+
} else {
|
|
317
|
+
registry.locales[locale] = phrases;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
function getLocale(locale) {
|
|
321
|
+
return registry.locales[locale];
|
|
322
|
+
}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.deserializeValues = deserializeValues;
|
|
7
|
+
exports.serializeValues = serializeValues;
|
|
8
|
+
var _isNil2 = _interopRequireDefault(require("lodash/isNil"));
|
|
9
|
+
var _immutable = require("immutable");
|
|
10
|
+
var _registry = require("./registry");
|
|
11
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
12
|
+
/**
|
|
13
|
+
* Methods for serializing/deserializing entry field values. Most widgets don't
|
|
14
|
+
* require this for their values, and those that do can typically serialize/
|
|
15
|
+
* deserialize on every change from within the widget. The serialization
|
|
16
|
+
* handlers here are for widgets whose values require heavy serialization that
|
|
17
|
+
* would hurt performance if run for every change.
|
|
18
|
+
|
|
19
|
+
* An example of this is the markdown widget, whose value is stored as a
|
|
20
|
+
* markdown string. Instead of stringifying on every change of that field, a
|
|
21
|
+
* deserialization method is registered from the widget's control module that
|
|
22
|
+
* converts the stored markdown string to an AST, and that AST serves as the
|
|
23
|
+
* widget model during editing.
|
|
24
|
+
*
|
|
25
|
+
* Serialization handlers should be registered for each widget that requires
|
|
26
|
+
* them, and the registration method is exposed through the registry. Any
|
|
27
|
+
* registered deserialization handlers run on entry load, and serialization
|
|
28
|
+
* handlers run on persist.
|
|
29
|
+
*/
|
|
30
|
+
function runSerializer(values, fields, method) {
|
|
31
|
+
/**
|
|
32
|
+
* Reduce the list of fields to a map where keys are field names and values
|
|
33
|
+
* are field values, serializing the values of fields whose widgets have
|
|
34
|
+
* registered serializers. If the field is a list or object, call recursively
|
|
35
|
+
* for nested fields.
|
|
36
|
+
*/
|
|
37
|
+
let serializedData = fields.reduce((acc, field) => {
|
|
38
|
+
const fieldName = field.get('name');
|
|
39
|
+
const value = values.get(fieldName);
|
|
40
|
+
const serializer = (0, _registry.getWidgetValueSerializer)(field.get('widget'));
|
|
41
|
+
const nestedFields = field.get('fields');
|
|
42
|
+
|
|
43
|
+
// Call recursively for fields within lists
|
|
44
|
+
if (nestedFields && _immutable.List.isList(value)) {
|
|
45
|
+
return acc.set(fieldName, value.map(val => runSerializer(val, nestedFields, method)));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Call recursively for fields within objects
|
|
49
|
+
if (nestedFields && _immutable.Map.isMap(value)) {
|
|
50
|
+
return acc.set(fieldName, runSerializer(value, nestedFields, method));
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Run serialization method on value if not null or undefined
|
|
54
|
+
if (serializer && !(0, _isNil2.default)(value)) {
|
|
55
|
+
return acc.set(fieldName, serializer[method](value));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// If no serializer is registered for the field's widget, use the field as is
|
|
59
|
+
if (!(0, _isNil2.default)(value)) {
|
|
60
|
+
return acc.set(fieldName, value);
|
|
61
|
+
}
|
|
62
|
+
return acc;
|
|
63
|
+
}, (0, _immutable.Map)());
|
|
64
|
+
|
|
65
|
+
//preserve unknown fields value
|
|
66
|
+
serializedData = values.mergeDeep(serializedData);
|
|
67
|
+
return serializedData;
|
|
68
|
+
}
|
|
69
|
+
function serializeValues(values, fields) {
|
|
70
|
+
return runSerializer(values, fields, 'serialize');
|
|
71
|
+
}
|
|
72
|
+
function deserializeValues(values, fields) {
|
|
73
|
+
return runSerializer(values, fields, 'deserialize');
|
|
74
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.stringToRGB = stringToRGB;
|
|
7
|
+
function stringToRGB(str) {
|
|
8
|
+
if (!str) return '000000';
|
|
9
|
+
let hash = 0;
|
|
10
|
+
for (let i = 0; i < str.length; i++) {
|
|
11
|
+
hash = str.charCodeAt(i) + ((hash << 5) - hash);
|
|
12
|
+
}
|
|
13
|
+
const c = (hash & 0x00ffffff).toString(16).toUpperCase();
|
|
14
|
+
return `00000${c}`.slice(-6);
|
|
15
|
+
}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.addParams = addParams;
|
|
7
|
+
exports.getCharReplacer = getCharReplacer;
|
|
8
|
+
exports.getCollectionUrl = getCollectionUrl;
|
|
9
|
+
exports.getNewEntryUrl = getNewEntryUrl;
|
|
10
|
+
exports.joinUrlPath = joinUrlPath;
|
|
11
|
+
exports.sanitizeChar = sanitizeChar;
|
|
12
|
+
exports.sanitizeSlug = sanitizeSlug;
|
|
13
|
+
exports.sanitizeURI = sanitizeURI;
|
|
14
|
+
exports.stripProtocol = stripProtocol;
|
|
15
|
+
var _partialRight2 = _interopRequireDefault(require("lodash/partialRight"));
|
|
16
|
+
var _flow2 = _interopRequireDefault(require("lodash/flow"));
|
|
17
|
+
var _escapeRegExp2 = _interopRequireDefault(require("lodash/escapeRegExp"));
|
|
18
|
+
var _isString2 = _interopRequireDefault(require("lodash/isString"));
|
|
19
|
+
var _url = _interopRequireDefault(require("url"));
|
|
20
|
+
var _urlJoin = _interopRequireDefault(require("url-join"));
|
|
21
|
+
var _diacritics = _interopRequireDefault(require("diacritics"));
|
|
22
|
+
var _sanitizeFilename = _interopRequireDefault(require("sanitize-filename"));
|
|
23
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
24
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
|
25
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
26
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
27
|
+
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); }
|
|
28
|
+
function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
|
|
29
|
+
function getUrl(urlString, direct) {
|
|
30
|
+
return `${direct ? '/#' : ''}${urlString}`;
|
|
31
|
+
}
|
|
32
|
+
function getCollectionUrl(collectionName, direct) {
|
|
33
|
+
return getUrl(`/collections/${collectionName}`, direct);
|
|
34
|
+
}
|
|
35
|
+
function getNewEntryUrl(collectionName, direct) {
|
|
36
|
+
return getUrl(`/collections/${collectionName}/new`, direct);
|
|
37
|
+
}
|
|
38
|
+
function addParams(urlString, params) {
|
|
39
|
+
const parsedUrl = _url.default.parse(urlString, true);
|
|
40
|
+
parsedUrl.query = _objectSpread(_objectSpread({}, parsedUrl.query), params);
|
|
41
|
+
return _url.default.format(parsedUrl);
|
|
42
|
+
}
|
|
43
|
+
function stripProtocol(urlString) {
|
|
44
|
+
const protocolEndIndex = urlString.indexOf('//');
|
|
45
|
+
return protocolEndIndex > -1 ? urlString.slice(protocolEndIndex + 2) : urlString;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* See https://www.w3.org/International/articles/idn-and-iri/#path.
|
|
49
|
+
* According to the new IRI (Internationalized Resource Identifier) spec, RFC 3987,
|
|
50
|
+
* ASCII chars should be kept the same way as in standard URIs (letters digits _ - . ~).
|
|
51
|
+
* Non-ASCII chars (unless they are not in the allowed "ucschars" list) should be percent-encoded.
|
|
52
|
+
* If the string is not encoded in Unicode, it should be converted to UTF-8 and normalized first,
|
|
53
|
+
* but JS stores strings as UTF-16/UCS-2 internally, so we should not normalize or re-encode.
|
|
54
|
+
*/
|
|
55
|
+
const uriChars = /[\w\-.~]/i;
|
|
56
|
+
const ucsChars = /[\xA0-\u{D7FF}\u{F900}-\u{FDCF}\u{FDF0}-\u{FFEF}\u{10000}-\u{1FFFD}\u{20000}-\u{2FFFD}\u{30000}-\u{3FFFD}\u{40000}-\u{4FFFD}\u{50000}-\u{5FFFD}\u{60000}-\u{6FFFD}\u{70000}-\u{7FFFD}\u{80000}-\u{8FFFD}\u{90000}-\u{9FFFD}\u{A0000}-\u{AFFFD}\u{B0000}-\u{BFFFD}\u{C0000}-\u{CFFFD}\u{D0000}-\u{DFFFD}\u{E1000}-\u{EFFFD}]/u;
|
|
57
|
+
function validURIChar(char) {
|
|
58
|
+
return uriChars.test(char);
|
|
59
|
+
}
|
|
60
|
+
function validIRIChar(char) {
|
|
61
|
+
return uriChars.test(char) || ucsChars.test(char);
|
|
62
|
+
}
|
|
63
|
+
function getCharReplacer(encoding, replacement) {
|
|
64
|
+
let validChar;
|
|
65
|
+
if (encoding === 'unicode') {
|
|
66
|
+
validChar = validIRIChar;
|
|
67
|
+
} else if (encoding === 'ascii') {
|
|
68
|
+
validChar = validURIChar;
|
|
69
|
+
} else {
|
|
70
|
+
throw new Error('`options.encoding` must be "unicode" or "ascii".');
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Check and make sure the replacement character is actually a safe char itself.
|
|
74
|
+
if (!Array.from(replacement).every(validChar)) {
|
|
75
|
+
throw new Error('The replacement character(s) (options.replacement) is itself unsafe.');
|
|
76
|
+
}
|
|
77
|
+
return char => validChar(char) ? char : replacement;
|
|
78
|
+
}
|
|
79
|
+
// `sanitizeURI` does not actually URI-encode the chars (that is the browser's and server's job), just removes the ones that are not allowed.
|
|
80
|
+
function sanitizeURI(str, options) {
|
|
81
|
+
const {
|
|
82
|
+
replacement = '',
|
|
83
|
+
encoding = 'unicode'
|
|
84
|
+
} = options || {};
|
|
85
|
+
if (!(0, _isString2.default)(str)) {
|
|
86
|
+
throw new Error('The input slug must be a string.');
|
|
87
|
+
}
|
|
88
|
+
if (!(0, _isString2.default)(replacement)) {
|
|
89
|
+
throw new Error('`options.replacement` must be a string.');
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// `Array.from` must be used instead of `String.split` because
|
|
93
|
+
// `split` converts things like emojis into UTF-16 surrogate pairs.
|
|
94
|
+
return Array.from(str).map(getCharReplacer(encoding, replacement)).join('');
|
|
95
|
+
}
|
|
96
|
+
function sanitizeChar(char, options) {
|
|
97
|
+
const {
|
|
98
|
+
encoding = 'unicode',
|
|
99
|
+
sanitize_replacement: replacement = ''
|
|
100
|
+
} = options || {};
|
|
101
|
+
return getCharReplacer(encoding, replacement)(char);
|
|
102
|
+
}
|
|
103
|
+
function sanitizeSlug(str, options) {
|
|
104
|
+
if (!(0, _isString2.default)(str)) {
|
|
105
|
+
throw new Error('The input slug must be a string.');
|
|
106
|
+
}
|
|
107
|
+
const {
|
|
108
|
+
encoding,
|
|
109
|
+
clean_accents: stripDiacritics,
|
|
110
|
+
sanitize_replacement: replacement
|
|
111
|
+
} = options || {};
|
|
112
|
+
const sanitizedSlug = (0, _flow2.default)([...(stripDiacritics ? [_diacritics.default.remove] : []), (0, _partialRight2.default)(sanitizeURI, {
|
|
113
|
+
replacement,
|
|
114
|
+
encoding
|
|
115
|
+
}), (0, _partialRight2.default)(_sanitizeFilename.default, {
|
|
116
|
+
replacement
|
|
117
|
+
})])(str);
|
|
118
|
+
|
|
119
|
+
// Remove any doubled or leading/trailing replacement characters (that were added in the sanitizers).
|
|
120
|
+
const doubleReplacement = new RegExp(`(?:${(0, _escapeRegExp2.default)(replacement)})+`, 'g');
|
|
121
|
+
const trailingReplacement = new RegExp(`${(0, _escapeRegExp2.default)(replacement)}$`);
|
|
122
|
+
const leadingReplacement = new RegExp(`^${(0, _escapeRegExp2.default)(replacement)}`);
|
|
123
|
+
const normalizedSlug = sanitizedSlug.replace(doubleReplacement, replacement).replace(leadingReplacement, '').replace(trailingReplacement, '');
|
|
124
|
+
return normalizedSlug;
|
|
125
|
+
}
|
|
126
|
+
function joinUrlPath(base, ...path) {
|
|
127
|
+
return (0, _urlJoin.default)(base, ...path);
|
|
128
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _once2 = _interopRequireDefault(require("lodash/once"));
|
|
4
|
+
var _registry = require("./lib/registry");
|
|
5
|
+
var _redux = require("./redux");
|
|
6
|
+
var _config = require("./actions/config");
|
|
7
|
+
var _mediaLibrary = require("./actions/mediaLibrary");
|
|
8
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
9
|
+
/**
|
|
10
|
+
* This module is currently concerned only with external media libraries
|
|
11
|
+
* registered via `registerMediaLibrary`.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
function handleInsert(url) {
|
|
15
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
16
|
+
// @ts-ignore
|
|
17
|
+
return _redux.store.dispatch((0, _mediaLibrary.insertMedia)(url, undefined));
|
|
18
|
+
}
|
|
19
|
+
const initializeMediaLibrary = (0, _once2.default)(async function initializeMediaLibrary(name, options) {
|
|
20
|
+
const lib = (0, _registry.getMediaLibrary)(name);
|
|
21
|
+
if (!lib) {
|
|
22
|
+
const err = new Error(`Missing external media library '${name}'. Please use 'registerMediaLibrary' to register it.`);
|
|
23
|
+
_redux.store.dispatch((0, _config.configFailed)(err));
|
|
24
|
+
} else {
|
|
25
|
+
const instance = await lib.init({
|
|
26
|
+
options,
|
|
27
|
+
handleInsert
|
|
28
|
+
});
|
|
29
|
+
_redux.store.dispatch((0, _mediaLibrary.createMediaLibrary)(instance));
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
_redux.store.subscribe(() => {
|
|
33
|
+
const state = _redux.store.getState();
|
|
34
|
+
if (state) {
|
|
35
|
+
var _state$config$media_l;
|
|
36
|
+
const mediaLibraryName = (_state$config$media_l = state.config.media_library) === null || _state$config$media_l === void 0 ? void 0 : _state$config$media_l.name;
|
|
37
|
+
if (mediaLibraryName && !state.mediaLibrary.get('externalLibrary')) {
|
|
38
|
+
const mediaLibraryConfig = state.config.media_library;
|
|
39
|
+
initializeMediaLibrary(mediaLibraryName, mediaLibraryConfig);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
});
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.defaultState = exports.default = void 0;
|
|
7
|
+
var _immer = require("immer");
|
|
8
|
+
var _auth = require("../actions/auth");
|
|
9
|
+
const defaultState = {
|
|
10
|
+
isFetching: false,
|
|
11
|
+
user: undefined,
|
|
12
|
+
error: undefined
|
|
13
|
+
};
|
|
14
|
+
exports.defaultState = defaultState;
|
|
15
|
+
const auth = (0, _immer.produce)((state, action) => {
|
|
16
|
+
switch (action.type) {
|
|
17
|
+
case _auth.AUTH_REQUEST:
|
|
18
|
+
state.isFetching = true;
|
|
19
|
+
break;
|
|
20
|
+
case _auth.AUTH_SUCCESS:
|
|
21
|
+
state.user = action.payload;
|
|
22
|
+
break;
|
|
23
|
+
case _auth.AUTH_FAILURE:
|
|
24
|
+
state.error = action.payload && action.payload.toString();
|
|
25
|
+
break;
|
|
26
|
+
case _auth.AUTH_REQUEST_DONE:
|
|
27
|
+
state.isFetching = false;
|
|
28
|
+
break;
|
|
29
|
+
case _auth.LOGOUT:
|
|
30
|
+
state.user = undefined;
|
|
31
|
+
state.isFetching = false;
|
|
32
|
+
}
|
|
33
|
+
}, defaultState);
|
|
34
|
+
var _default = auth;
|
|
35
|
+
exports.default = _default;
|