mirror of
https://github.com/Tencent/tmagic-editor.git
synced 2026-06-04 23:13:13 +08:00
fix(editor): serializeConfig 只去掉对象 key 的引号,避免破坏字符串 value 内的引号
This commit is contained in:
parent
a1fcb191d2
commit
540a2716d8
@ -324,11 +324,14 @@ export const fixNodePosition = (config: MNode, parent: MContainer, stage: StageC
|
|||||||
};
|
};
|
||||||
|
|
||||||
// 序列化配置
|
// 序列化配置
|
||||||
|
// 仅去掉对象 key 的双引号;字符串值内的 "xxx": 不应被误处理
|
||||||
|
// serialize-javascript 在 space: 2 时,每个 key 都会出现在换行 + 空白缩进之后,
|
||||||
|
// 因此通过 (^|\n)\s* 锚定行首缩进,避免匹配到字符串值中的 \"xxx\":
|
||||||
export const serializeConfig = (config: any) =>
|
export const serializeConfig = (config: any) =>
|
||||||
serialize(config, {
|
serialize(config, {
|
||||||
space: 2,
|
space: 2,
|
||||||
unsafe: true,
|
unsafe: true,
|
||||||
}).replace(/"(\w+)":\s/g, '$1: ');
|
}).replace(/(^|\n)(\s*)"(\w+)":\s/g, '$1$2$3: ');
|
||||||
|
|
||||||
export const moveItemsInContainer = (sourceIndices: number[], parent: MContainer, targetIndex: number) => {
|
export const moveItemsInContainer = (sourceIndices: number[], parent: MContainer, targetIndex: number) => {
|
||||||
sourceIndices.sort((a, b) => a - b);
|
sourceIndices.sort((a, b) => a - b);
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
/* eslint-disable prettier/prettier */
|
||||||
/*
|
/*
|
||||||
* Tencent is pleased to support the open source community by making TMagicEditor available.
|
* Tencent is pleased to support the open source community by making TMagicEditor available.
|
||||||
*
|
*
|
||||||
@ -1046,6 +1047,53 @@ describe('补充:fixNodeLeft / fixNodePosition / serializeConfig', () => {
|
|||||||
const out = editor.serializeConfig({ a: 1 });
|
const out = editor.serializeConfig({ a: 1 });
|
||||||
expect(out).toContain('a:');
|
expect(out).toContain('a:');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('serializeConfig - 输出去掉了 key 引号', () => {
|
||||||
|
const out = editor.serializeConfig({ a: { b: 1 }});
|
||||||
|
expect(out).toContain('a:');
|
||||||
|
expect(out).toContain('b: 1');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('serializeConfig - value中包含"x"', () => {
|
||||||
|
const out = editor.serializeConfig({ a: '"a": 1' });
|
||||||
|
expect(out).toContain('\\"a\\":');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('serializeConfig - value中包含"x"', () => {
|
||||||
|
const out = editor.serializeConfig({ a: { b: '"a": 1' } });
|
||||||
|
expect(out).toContain('\\"a\\":');
|
||||||
|
expect(out).toContain('b: ');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('serializeConfig - function', () => {
|
||||||
|
const out = editor.serializeConfig({
|
||||||
|
a: () => {
|
||||||
|
const b = "b";
|
||||||
|
switch (b) {
|
||||||
|
// @ts-ignore
|
||||||
|
case "a":
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
expect(out).toContain('"a":');
|
||||||
|
});
|
||||||
|
|
||||||
|
test('serializeConfig - function', () => {
|
||||||
|
const out = editor.serializeConfig({
|
||||||
|
a: {
|
||||||
|
b: () => {
|
||||||
|
const b = "b";
|
||||||
|
switch (b) {
|
||||||
|
// @ts-ignore
|
||||||
|
case "a": return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
});
|
||||||
|
expect(out).toContain('"a":');
|
||||||
|
expect(out).toContain('b: ');
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('补充:isIncludeDataSource', () => {
|
describe('补充:isIncludeDataSource', () => {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user