Browse Source

Up TS naming

data-source-import-policy
Artur Arseniev 6 months ago
parent
commit
20d1d46353
  1. 6
      packages/core/src/data_sources/config/config.ts
  2. 18
      packages/core/src/data_sources/types.ts
  3. 22
      packages/core/src/dom_components/model/ModelResolverWatcher.ts
  4. 4
      packages/core/src/dom_components/types.ts
  5. 10
      packages/core/src/index.ts
  6. 18
      packages/core/test/specs/data_sources/import_policy.ts

6
packages/core/src/data_sources/config/config.ts

@ -1,4 +1,4 @@
import type { DataSourcePropertyHandler } from '../types';
import type { DataBindingImportPolicy } from '../types';
export interface DataSourcesConfig {
/**
@ -11,12 +11,12 @@ export interface DataSourcesConfig {
* Controls how parsed static HTML/CSS updates interact with existing data source bindings.
* @default 'overwrite'
*/
onDataSourceProperty?: DataSourcePropertyHandler;
dataBindingImportPolicy?: DataBindingImportPolicy;
}
const config: () => DataSourcesConfig = () => ({
autoloadProviders: false,
onDataSourceProperty: 'overwrite',
dataBindingImportPolicy: 'overwrite',
});
export default config;

18
packages/core/src/data_sources/types.ts

@ -168,16 +168,16 @@ export interface DataSourceTransformers {
onRecordSetValue?: (args: { id: string | number; key: string; value: any }) => any;
}
export type DataSourceImportSource = 'html' | 'css';
export type DataBindingImportSource = 'html' | 'css';
export type DataSourcePropertyKind = 'property' | 'attribute' | 'style';
export type DataBindingKind = 'property' | 'attribute' | 'style';
export type DataSourcePropertyAction = 'overwrite' | 'update' | 'skip';
export type DataBindingImportAction = 'overwrite' | 'update' | 'skip';
export interface DataSourcePropertyContext {
export interface DataBindingImportContext {
target: StyleableModel;
kind: DataSourcePropertyKind;
source: DataSourceImportSource;
kind: DataBindingKind;
source: DataBindingImportSource;
key: string;
value: any;
resolvedValue: any;
@ -185,9 +185,9 @@ export interface DataSourcePropertyContext {
path?: string;
}
export type DataSourcePropertyHandler =
| DataSourcePropertyAction
| ((context: DataSourcePropertyContext) => DataSourcePropertyAction);
export type DataBindingImportPolicy =
| DataBindingImportAction
| ((context: DataBindingImportContext) => DataBindingImportAction);
type DotSeparatedKeys<T> = T extends object
? {

22
packages/core/src/dom_components/model/ModelResolverWatcher.ts

@ -1,10 +1,10 @@
import { ObjectAny, ObjectHash } from '../../common';
import DataResolverListener from '../../data_sources/model/DataResolverListener';
import {
DataSourceImportSource,
DataSourcePropertyContext,
DataSourcePropertyHandler,
DataSourcePropertyKind,
DataBindingImportContext,
DataBindingImportPolicy,
DataBindingImportSource,
DataBindingKind,
} from '../../data_sources/types';
import { getDataResolverInstance, getDataResolverInstanceValue, isDataResolverProps } from '../../data_sources/utils';
import type StyleableModel from '../../domain_abstract/model/StyleableModel';
@ -14,7 +14,7 @@ import { isFunction } from 'underscore';
export interface DataWatchersOptions {
skipWatcherUpdates?: boolean;
fromDataSource?: boolean;
parsedImportSource?: DataSourceImportSource;
parsedImportSource?: DataBindingImportSource;
}
export interface ModelResolverWatcherOptions {
@ -31,7 +31,7 @@ export class ModelResolverWatcher<T extends ObjectHash> {
constructor(
private model: WatchableModel<T>,
private updateFn: UpdateFn<T>,
private kind: DataSourcePropertyKind,
private kind: DataBindingKind,
options: ModelResolverWatcherOptions,
) {
this.em = options.em;
@ -125,7 +125,7 @@ export class ModelResolverWatcher<T extends ObjectHash> {
private applyImportPolicy(values: ObjectAny | undefined, options: DataWatchersOptions = {}) {
const { parsedImportSource } = options;
const { onDataSourceProperty } = this.em.DataSources.config;
const { dataBindingImportPolicy } = this.em.DataSources.config;
if (!values || !parsedImportSource) return values;
@ -142,7 +142,7 @@ export class ModelResolverWatcher<T extends ObjectHash> {
const resolver = resolverListener.resolver.toJSON();
const path = 'path' in resolver ? resolver.path : undefined;
const context: DataSourcePropertyContext = {
const context: DataBindingImportContext = {
target: this.model as StyleableModel,
kind: this.kind,
source,
@ -152,7 +152,7 @@ export class ModelResolverWatcher<T extends ObjectHash> {
resolver,
path,
};
const action = this.resolveImportAction(onDataSourceProperty, context);
const action = this.resolveImportAction(dataBindingImportPolicy, context);
if (action === 'overwrite') {
return;
@ -172,7 +172,7 @@ export class ModelResolverWatcher<T extends ObjectHash> {
return nextValues;
}
private resolveImportAction(handler: DataSourcePropertyHandler | undefined, context: DataSourcePropertyContext) {
private resolveImportAction(handler: DataBindingImportPolicy | undefined, context: DataBindingImportContext) {
const action = isFunction(handler) ? handler(context) : handler;
return action === 'skip' || action === 'update' || action === 'overwrite' ? action : 'overwrite';
@ -190,7 +190,7 @@ export class ModelResolverWatcher<T extends ObjectHash> {
}
}
private warnImportFallback(key: string, source: DataSourceImportSource, path?: string) {
private warnImportFallback(key: string, source: DataBindingImportSource, path?: string) {
this.em.logWarning(
`[DataSources]: Failed to update the data source bound to "${key}" during ${source} import; keeping the existing binding.`,
{ key, source, path },

4
packages/core/src/dom_components/types.ts

@ -13,7 +13,7 @@ import type {
ComponentResizeEventStartProps,
ComponentResizeEventUpdateProps,
} from '../commands/view/Resize';
import type { DataSourceImportSource } from '../data_sources/types';
import type { DataBindingImportSource } from '../data_sources/types';
import type { StyleProps } from '../domain_abstract/model/StyleableModel';
import type Selector from '../selector_manager/model/Selector';
import type Component from './model/Component';
@ -40,7 +40,7 @@ export interface SymbolInfo {
export interface ParseStringOptions extends AddOptions, OptionAsDocument, WithHTMLParserOptions {
keepIds?: string[];
cloneRules?: boolean;
parsedImportSource?: DataSourceImportSource;
parsedImportSource?: DataBindingImportSource;
}
export enum ComponentsEvents {

10
packages/core/src/index.ts

@ -160,11 +160,11 @@ export type {
ExpressionProps,
} from './data_sources/model/conditional_variables/DataCondition';
export type {
DataSourceImportSource,
DataSourcePropertyAction,
DataSourcePropertyContext,
DataSourcePropertyHandler,
DataSourcePropertyKind,
DataBindingImportAction,
DataBindingImportContext,
DataBindingImportPolicy,
DataBindingImportSource,
DataBindingKind,
} from './data_sources/types';
export default grapesjs;

18
packages/core/test/specs/data_sources/import_policy.ts

@ -1,4 +1,4 @@
import type { CssRule, DataSourcePropertyContext, Editor } from '../../../src';
import type { CssRule, DataBindingImportContext, Editor } from '../../../src';
import type DataSourceManager from '../../../src/data_sources';
import { DataConditionType } from '../../../src/data_sources/model/conditional_variables/DataCondition';
import { StringOperation } from '../../../src/data_sources/model/conditional_variables/operators/StringOperator';
@ -110,7 +110,7 @@ describe('Data source import policy', () => {
test('skips static HTML updates and preserves existing bindings', () => {
init({
dataSources: { onDataSourceProperty: 'skip' },
dataSources: { dataBindingImportPolicy: 'skip' },
});
addBaseDataSource();
const component = createBoundComponent();
@ -130,7 +130,7 @@ describe('Data source import policy', () => {
test('updates datasource values and keeps bindings on parsed HTML import', () => {
init({
dataSources: { onDataSourceProperty: 'update' },
dataSources: { dataBindingImportPolicy: 'update' },
});
addBaseDataSource();
const component = createBoundComponent();
@ -164,7 +164,7 @@ describe('Data source import policy', () => {
test('skips static CSS updates and preserves existing rule bindings', () => {
init({
dataSources: { onDataSourceProperty: 'skip' },
dataSources: { dataBindingImportPolicy: 'skip' },
});
addBaseDataSource();
const rule = createBoundRule();
@ -181,7 +181,7 @@ describe('Data source import policy', () => {
test('applies policy to parsed CSS string imports for existing rules', () => {
init({
dataSources: { onDataSourceProperty: 'update' },
dataSources: { dataBindingImportPolicy: 'update' },
});
addBaseDataSource();
const rule = createBoundRule();
@ -199,7 +199,7 @@ describe('Data source import policy', () => {
test('supports callback policies per key and kind', () => {
init({
dataSources: {
onDataSourceProperty: ({ key, kind, source }: DataSourcePropertyContext) => {
dataBindingImportPolicy: ({ key, kind, source }: DataBindingImportContext) => {
if (source === 'html' && kind === 'attribute' && key === 'data-attr') {
return 'skip';
}
@ -221,7 +221,7 @@ describe('Data source import policy', () => {
test('keeps bindings and warns when update cannot write data-condition values', () => {
init({
dataSources: { onDataSourceProperty: 'update' },
dataSources: { dataBindingImportPolicy: 'update' },
});
addBaseDataSource();
const warningSpy = jest.spyOn(em, 'logWarning');
@ -244,7 +244,7 @@ describe('Data source import policy', () => {
test('keeps bindings and warns when datasource updates fail', () => {
init({
dataSources: { onDataSourceProperty: 'update' },
dataSources: { dataBindingImportPolicy: 'update' },
});
addBaseDataSource({ id: 'rec1', title: 'Initial Title', color: 'red', content: 'Dynamic Content', mutable: false });
const warningSpy = jest.spyOn(em, 'logWarning');
@ -259,7 +259,7 @@ describe('Data source import policy', () => {
test('does not change direct setter overwrite behavior', () => {
init({
dataSources: { onDataSourceProperty: 'skip' },
dataSources: { dataBindingImportPolicy: 'skip' },
});
addBaseDataSource();
const component = createBoundComponent();

Loading…
Cancel
Save