@univerjs/sheets-sort 0.2.4 → 0.2.6

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/lib/cjs/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var M=Object.defineProperty;var j=(e,r,t)=>r in e?M(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t;var d=(e,r,t)=>j(e,typeof r!="symbol"?r+"":r,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("@univerjs/core"),C=require("@wendellhu/redi"),I=require("@univerjs/sheets"),$=require("@univerjs/engine-formula");var f=(e=>(e.DESC="desc",e.ASC="asc",e))(f||{});const A=e=>e.replace(/-/gi,"").replace(/'/gi,""),V=(e,r)=>{const t=e===null||e==="",o=r===null||r==="";return t&&o?0:t?1:o?-1:null},x=(e,r,t)=>{const o=typeof e=="number",n=typeof r=="number";return o&&n?e<r?t===f.ASC?-1:1:e>r?t===f.ASC?1:-1:0:o?t===f.ASC?1:-1:n?t===f.ASC?-1:1:null},L=(e,r,t)=>{const o=typeof e=="string",n=typeof r=="string";if(o&&(e=A(e.toLocaleLowerCase())),n&&(r=A(r.toLocaleLowerCase())),!o&&!n)return null;if(o&&n){const s=e,i=r;return s<i?t===f.ASC?-1:1:s>i?t===f.ASC?1:-1:0}return o?t===f.ASC?1:-1:n?t===f.ASC?-1:1:null},F=e=>!e||Object.keys(e).length===0||(e==null?void 0:e.v)==null&&(e==null?void 0:e.p)==null;var q=Object.defineProperty,B=Object.getOwnPropertyDescriptor,G=(e,r,t,o)=>{for(var n=o>1?void 0:o?B(r,t):r,s=e.length-1,i;s>=0;s--)(i=e[s])&&(n=(o?i(r,t,n):i(n))||n);return o&&n&&q(r,t,n),n},R=(e,r)=>(t,o)=>r(t,o,e);exports.SheetsSortService=class extends c.Disposable{constructor(t,o,n){super();d(this,"_compareFns",[]);this._univerInstanceService=t,this._commandService=o,this._formulaDataModel=n}mergeCheck(t){var u;const{unitId:o,subUnitId:n,range:s}=t,i=(u=this._univerInstanceService.getUnit(o))==null?void 0:u.getSheetBySheetId(n);if(!i)return!1;const l=i.getMergeData().filter(a=>c.Rectangle.contains(s,a));return l.length===0?!0:H(s,l)}emptyCheck(t){var l;const{unitId:o,subUnitId:n,range:s}=t,i=(l=this._univerInstanceService.getUnit(o))==null?void 0:l.getSheetBySheetId(n);if(!i)return!1;for(let u=s.startRow;u<=s.endRow;u++)for(let a=s.startColumn;a<=s.endColumn;a++)if(!F(i.getCellRaw(u,a)))return!0;return!1}singleCheck(t){return t.range.startRow!==t.range.endRow}formulaCheck(t){var l,u;const{unitId:o,subUnitId:n,range:s}=t,i=(u=(l=this._formulaDataModel.getArrayFormulaRange())==null?void 0:l[o])==null?void 0:u[n];for(const a in i){const S=i[Number(a)];for(const p in S){const g=S[Number(p)];if(g&&c.Rectangle.intersects(s,g))return!1}}return!0}registerCompareFn(t){this._compareFns.unshift(t)}getAllCompareFns(){return this._compareFns}applySort(t,o,n){var l;const{unitId:s,subUnitId:i}=I.getSheetCommandTarget(this._univerInstanceService)||{};this._commandService.executeCommand(w.id,{orderRules:t.orderRules,range:t.range,hasTitle:(l=t.hasTitle)!=null?l:!1,unitId:o||s,subUnitId:n||i})}};exports.SheetsSortService=G([c.OnLifecycle(c.LifecycleStages.Ready,exports.SheetsSortService),R(0,c.IUniverInstanceService),R(1,c.ICommandService),R(2,C.Inject($.FormulaDataModel))],exports.SheetsSortService);function H(e,r){const t=e.endRow-e.startRow+1,o=e.endColumn-e.startColumn+1;let n=null,s=null;const i=t*o;let l=0;for(const u of r)if(u.startRow>=e.startRow&&u.endRow<=e.endRow&&u.startColumn>=e.startColumn&&u.endColumn<=e.endColumn){const a=u.endRow-u.startRow+1,S=u.endColumn-u.startColumn+1;if(n===null&&s===null)n=a,s=S;else if(a!==n||S!==s)return!1;l+=a*S}return l===i}const w={id:"sheet.command.sort-range",type:c.CommandType.COMMAND,handler:(e,r)=>{const{range:t,orderRules:o,hasTitle:n,unitId:s,subUnitId:i}=r,l=e.get(exports.SheetsSortService),u=e.get(c.IUniverInstanceService),{worksheet:a}=I.getSheetCommandTarget(u,r)||{};if(!a)return!1;const S=a.getMergeData().filter(m=>c.Rectangle.contains(t,m)),p=S.map(m=>m.startRow),{startRow:g,endRow:P}=t,N=n?g+1:g,_=[],b=[];for(let m=N;m<=P;m++)a.getRowFiltered(m)||a.getRowRawVisible(m)!==!1&&(S.length&&!p.includes(m)||(_.push({index:m,value:W(a,m,o)}),b.push(m)));const O=l.getAllCompareFns();_.sort(J(o,z(O)));const y={};_.forEach(({index:m,value:ne},E)=>{y[b[E]]=m});const U={id:I.ReorderRangeCommand.id,params:{unitId:s,subUnitId:i,range:t,order:y}},T=e.get(c.ICommandService);return c.sequenceExecute([U],T).result}};function W(e,r,t){const o=[];return t.forEach(({colIndex:n})=>{o.push(e.getCellRaw(r,n))}),o}function z(e){return(r,t,o)=>{for(let n=0;n<e.length;n++){const s=e[n](r,t,o);if(s!=null)return s}return 0}}function J(e,r){return function(t,o){let n=null;for(let s=0;s<e.length;s++){const i=t.value[s],l=o.value[s];if(n=r(e[s].type,i,l),n!==0&&n!==null&&n!==void 0)return n}return 0}}var K=Object.defineProperty,Q=Object.getOwnPropertyDescriptor,X=(e,r,t,o)=>{for(var n=o>1?void 0:o?Q(r,t):r,s=e.length-1,i;s>=0;s--)(i=e[s])&&(n=(o?i(r,t,n):i(n))||n);return o&&n&&K(r,t,n),n},D=(e,r)=>(t,o)=>r(t,o,e);let h=class extends c.Disposable{constructor(e,r){super(),this._commandService=e,this._sortService=r,this._initCommands(),this._registerCompareFns()}_initCommands(){[w].forEach(e=>this.disposeWithMe(this._commandService.registerCommand(e)))}_registerCompareFns(){const e=(r,t,o)=>{const n=this._getCommonValue(t),s=this._getCommonValue(o),i=[V,L,x];for(let l=0;l<i.length;l++){const u=i[l](n,s,r);if(u!==null)return u}return null};this._sortService.registerCompareFn(e)}_getCommonValue(e){var t,o;if(F(e))return null;const r=(o=(t=e==null?void 0:e.p)==null?void 0:t.body)==null?void 0:o.dataStream;return r||((e==null?void 0:e.t)===c.CellValueType.NUMBER?Number.parseFloat(`${e.v}`):(e==null?void 0:e.t)===c.CellValueType.STRING?typeof e.v=="number"?e.v:`${e.v}`:(e==null?void 0:e.t)===c.CellValueType.BOOLEAN?`${e.v}`:(e==null?void 0:e.t)===c.CellValueType.FORCE_STRING?Number.parseFloat(`${e.v}`):`${e==null?void 0:e.v}`)}};h=X([c.OnLifecycle(c.LifecycleStages.Ready,h),D(0,c.ICommandService),D(1,C.Inject(exports.SheetsSortService))],h);var Y=Object.defineProperty,Z=Object.getOwnPropertyDescriptor,k=(e,r,t,o)=>{for(var n=o>1?void 0:o?Z(r,t):r,s=e.length-1,i;s>=0;s--)(i=e[s])&&(n=(o?i(r,t,n):i(n))||n);return o&&n&&Y(r,t,n),n},ee=(e,r)=>(t,o)=>r(t,o,e);const te="UNIVER_SHEETS_SORT_PLUGIN";var v;exports.UniverSheetsSortPlugin=(v=class extends c.Plugin{constructor(r,t){super(),this._injector=t}onStarting(r){[[h],[exports.SheetsSortService]].forEach(t=>r.add(t))}},d(v,"type",c.UniverInstanceType.UNIVER_SHEET),d(v,"pluginName",te),v);exports.UniverSheetsSortPlugin=k([ee(1,C.Inject(C.Injector))],exports.UniverSheetsSortPlugin);exports.SortRangeCommand=w;exports.SortType=f;
1
+ "use strict";var __defProp=Object.defineProperty;var __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __publicField=(obj,key,value)=>__defNormalProp(obj,typeof key!="symbol"?key+"":key,value);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const core=require("@univerjs/core"),sheets=require("@univerjs/sheets"),engineFormula=require("@univerjs/engine-formula");var SortType=(SortType2=>(SortType2.DESC="desc",SortType2.ASC="asc",SortType2))(SortType||{});const removeStringSymbol=__name(str=>str.replace(/-/gi,"").replace(/'/gi,""),"removeStringSymbol"),compareNull=__name((a1,a2)=>{const isA1Null=a1===null||a1==="",isA2Null=a2===null||a2==="";return isA1Null&&isA2Null?0:isA1Null?1:isA2Null?-1:null},"compareNull"),compareNumber=__name((a1,a2,type)=>{const isA1Num=typeof a1=="number",isA2Num=typeof a2=="number";return isA1Num&&isA2Num?a1<a2?type===SortType.ASC?-1:1:a1>a2?type===SortType.ASC?1:-1:0:isA1Num?type===SortType.ASC?1:-1:isA2Num?type===SortType.ASC?-1:1:null},"compareNumber"),compareString=__name((a1,a2,type)=>{const isA1Str=typeof a1=="string",isA2Str=typeof a2=="string";if(isA1Str&&(a1=removeStringSymbol(a1.toLocaleLowerCase())),isA2Str&&(a2=removeStringSymbol(a2.toLocaleLowerCase())),!isA1Str&&!isA2Str)return null;if(isA1Str&&isA2Str){const a1AsString=a1,a2AsString=a2;return a1AsString<a2AsString?type===SortType.ASC?-1:1:a1AsString>a2AsString?type===SortType.ASC?1:-1:0}return isA1Str?type===SortType.ASC?1:-1:isA2Str?type===SortType.ASC?-1:1:null},"compareString"),isNullValue=__name(cell=>!cell||Object.keys(cell).length===0||(cell==null?void 0:cell.v)==null&&(cell==null?void 0:cell.p)==null,"isNullValue");var __defProp$2=Object.defineProperty,__getOwnPropDesc$2=Object.getOwnPropertyDescriptor,__decorateClass$2=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$2(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$2(target,key,result),result},"__decorateClass$2"),__decorateParam$2=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$2"),_a;exports.SheetsSortService=(_a=class extends core.Disposable{constructor(_univerInstanceService,_commandService,_formulaDataModel){super();__publicField(this,"_compareFns",[]);this._univerInstanceService=_univerInstanceService,this._commandService=_commandService,this._formulaDataModel=_formulaDataModel}mergeCheck(location){var _a4;const{unitId,subUnitId,range}=location,sheet=(_a4=this._univerInstanceService.getUnit(unitId))==null?void 0:_a4.getSheetBySheetId(subUnitId);if(!sheet)return!1;const mergeDataInRange=sheet.getMergeData().filter(merge=>core.Rectangle.contains(range,merge));return mergeDataInRange.length===0?!0:isRangeDividedEqually(range,mergeDataInRange)}emptyCheck(location){var _a4;const{unitId,subUnitId,range}=location,sheet=(_a4=this._univerInstanceService.getUnit(unitId))==null?void 0:_a4.getSheetBySheetId(subUnitId);if(!sheet)return!1;for(let row=range.startRow;row<=range.endRow;row++)for(let col=range.startColumn;col<=range.endColumn;col++)if(!isNullValue(sheet.getCellRaw(row,col)))return!0;return!1}singleCheck(location){return location.range.startRow!==location.range.endRow}formulaCheck(location){var _a4,_b;const{unitId,subUnitId,range}=location,arrayFormulaRange=(_b=(_a4=this._formulaDataModel.getArrayFormulaRange())==null?void 0:_a4[unitId])==null?void 0:_b[subUnitId];for(const row in arrayFormulaRange){const rowData=arrayFormulaRange[Number(row)];for(const col in rowData){const arrayFormula=rowData[Number(col)];if(arrayFormula&&core.Rectangle.intersects(range,arrayFormula))return!1}}return!0}registerCompareFn(fn){this._compareFns.unshift(fn)}getAllCompareFns(){return this._compareFns}applySort(sortOption,unitId,subUnitId){var _a4;const{unitId:_unitId,subUnitId:_subUnitId}=sheets.getSheetCommandTarget(this._univerInstanceService)||{};this._commandService.executeCommand(SortRangeCommand.id,{orderRules:sortOption.orderRules,range:sortOption.range,hasTitle:(_a4=sortOption.hasTitle)!=null?_a4:!1,unitId:unitId||_unitId,subUnitId:subUnitId||_subUnitId})}},__name(_a,"SheetsSortService"),_a);exports.SheetsSortService=__decorateClass$2([core.OnLifecycle(core.LifecycleStages.Ready,exports.SheetsSortService),__decorateParam$2(0,core.IUniverInstanceService),__decorateParam$2(1,core.ICommandService),__decorateParam$2(2,core.Inject(engineFormula.FormulaDataModel))],exports.SheetsSortService);function isRangeDividedEqually(range,merges){const rangeRows=range.endRow-range.startRow+1,rangeCols=range.endColumn-range.startColumn+1;let mergeRows=null,mergeCols=null;const totalArea=rangeRows*rangeCols;let totalMergeArea=0;for(const merge of merges)if(merge.startRow>=range.startRow&&merge.endRow<=range.endRow&&merge.startColumn>=range.startColumn&&merge.endColumn<=range.endColumn){const currentMergeRows=merge.endRow-merge.startRow+1,currentMergeCols=merge.endColumn-merge.startColumn+1;if(mergeRows===null&&mergeCols===null)mergeRows=currentMergeRows,mergeCols=currentMergeCols;else if(currentMergeRows!==mergeRows||currentMergeCols!==mergeCols)return!1;totalMergeArea+=currentMergeRows*currentMergeCols}return totalMergeArea===totalArea}__name(isRangeDividedEqually,"isRangeDividedEqually");const SortRangeCommand={id:"sheet.command.sort-range",type:core.CommandType.COMMAND,handler:__name((accessor,params)=>{const{range,orderRules,hasTitle,unitId,subUnitId}=params,sortService=accessor.get(exports.SheetsSortService),univerInstanceService=accessor.get(core.IUniverInstanceService),{worksheet}=sheets.getSheetCommandTarget(univerInstanceService,params)||{};if(!worksheet)return!1;const mergeDataInRange=worksheet.getMergeData().filter(mergeData=>core.Rectangle.contains(range,mergeData)),mergeMainRowIndexes=mergeDataInRange.map(mergeData=>mergeData.startRow),{startRow:rangeStartRow,endRow}=range,startRow=hasTitle?rangeStartRow+1:rangeStartRow,toReorder=[],oldOrder=[];for(let rowIndex=startRow;rowIndex<=endRow;rowIndex++)worksheet.getRowFiltered(rowIndex)||worksheet.getRowRawVisible(rowIndex)!==!1&&(mergeDataInRange.length&&!mergeMainRowIndexes.includes(rowIndex)||(toReorder.push({index:rowIndex,value:getRowCellData(worksheet,rowIndex,orderRules)}),oldOrder.push(rowIndex)));const compareFns=sortService.getAllCompareFns();toReorder.sort(reorderFnGenerator(orderRules,combineCompareFnsAsOne(compareFns)));const order={};toReorder.forEach(({index,value},oldIndex)=>{order[oldOrder[oldIndex]]=index});const reorderRangeCommand={id:sheets.ReorderRangeCommand.id,params:{unitId,subUnitId,range,order}},commandService=accessor.get(core.ICommandService);return core.sequenceExecute([reorderRangeCommand],commandService).result},"handler")};function getRowCellData(worksheet,rowIndex,orderRules){const result=[];return orderRules.forEach(({colIndex})=>{result.push(worksheet.getCellRaw(rowIndex,colIndex))}),result}__name(getRowCellData,"getRowCellData");function combineCompareFnsAsOne(compareFns){return(type,a,b)=>{for(let i=0;i<compareFns.length;i++){const res=compareFns[i](type,a,b);if(res!=null)return res}return 0}}__name(combineCompareFnsAsOne,"combineCompareFnsAsOne");function reorderFnGenerator(orderRules,valueCompare){return function(a,b){let ret=null;for(let index=0;index<orderRules.length;index++){const aCellData=a.value[index],bCellData=b.value[index];if(ret=valueCompare(orderRules[index].type,aCellData,bCellData),ret!==0&&ret!==null&&ret!==void 0)return ret}return 0}}__name(reorderFnGenerator,"reorderFnGenerator");var __defProp$1=Object.defineProperty,__getOwnPropDesc$1=Object.getOwnPropertyDescriptor,__decorateClass$1=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$1(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$1(target,key,result),result},"__decorateClass$1"),__decorateParam$1=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$1"),_a2;let SheetsSortController=(_a2=class extends core.Disposable{constructor(_commandService,_sortService){super(),this._commandService=_commandService,this._sortService=_sortService,this._initCommands(),this._registerCompareFns()}_initCommands(){[SortRangeCommand].forEach(command=>this.disposeWithMe(this._commandService.registerCommand(command)))}_registerCompareFns(){const commonFn=__name((type,a,b)=>{const valueA=this._getCommonValue(a),valueB=this._getCommonValue(b),compareTypeFns=[compareNull,compareString,compareNumber];for(let i=0;i<compareTypeFns.length;i++){const res=compareTypeFns[i](valueA,valueB,type);if(res!==null)return res}return null},"commonFn");this._sortService.registerCompareFn(commonFn)}_getCommonValue(a){var _a4,_b;if(isNullValue(a))return null;const richTextValue=(_b=(_a4=a==null?void 0:a.p)==null?void 0:_a4.body)==null?void 0:_b.dataStream;return richTextValue||((a==null?void 0:a.t)===core.CellValueType.NUMBER?Number.parseFloat(`${a.v}`):(a==null?void 0:a.t)===core.CellValueType.STRING?typeof a.v=="number"?a.v:`${a.v}`:(a==null?void 0:a.t)===core.CellValueType.BOOLEAN?`${a.v}`:(a==null?void 0:a.t)===core.CellValueType.FORCE_STRING?Number.parseFloat(`${a.v}`):`${a==null?void 0:a.v}`)}},__name(_a2,"SheetsSortController"),_a2);SheetsSortController=__decorateClass$1([core.OnLifecycle(core.LifecycleStages.Ready,SheetsSortController),__decorateParam$1(0,core.ICommandService),__decorateParam$1(1,core.Inject(exports.SheetsSortService))],SheetsSortController);var __defProp2=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__decorateClass=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp2(target,key,result),result},"__decorateClass"),__decorateParam=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam");const NAME="UNIVER_SHEETS_SORT_PLUGIN";var _a3;exports.UniverSheetsSortPlugin=(_a3=class extends core.Plugin{constructor(_config,_injector){super(),this._injector=_injector}onStarting(){[[SheetsSortController],[exports.SheetsSortService]].forEach(d=>this._injector.add(d))}},__name(_a3,"UniverSheetsSortPlugin"),__publicField(_a3,"type",core.UniverInstanceType.UNIVER_SHEET),__publicField(_a3,"pluginName",NAME),_a3);exports.UniverSheetsSortPlugin=__decorateClass([__decorateParam(1,core.Inject(core.Injector))],exports.UniverSheetsSortPlugin);exports.SortRangeCommand=SortRangeCommand;exports.SortType=SortType;
package/lib/es/index.js CHANGED
@@ -1,238 +1,242 @@
1
- var q = Object.defineProperty;
2
- var H = (e, r, n) => r in e ? q(e, r, { enumerable: !0, configurable: !0, writable: !0, value: n }) : e[r] = n;
3
- var v = (e, r, n) => H(e, typeof r != "symbol" ? r + "" : r, n);
4
- import { OnLifecycle as O, LifecycleStages as P, Disposable as E, Rectangle as R, IUniverInstanceService as U, ICommandService as w, CommandType as W, sequenceExecute as z, CellValueType as C, Plugin as J, UniverInstanceType as K } from "@univerjs/core";
5
- import { Inject as I, Injector as Q } from "@wendellhu/redi";
6
- import { getSheetCommandTarget as M, ReorderRangeCommand as X } from "@univerjs/sheets";
7
- import { FormulaDataModel as Y } from "@univerjs/engine-formula";
8
- var m = /* @__PURE__ */ ((e) => (e.DESC = "desc", e.ASC = "asc", e))(m || {});
9
- const F = (e) => e.replace(/-/gi, "").replace(/'/gi, ""), Z = (e, r) => {
10
- const n = e === null || e === "", o = r === null || r === "";
11
- return n && o ? 0 : n ? 1 : o ? -1 : null;
12
- }, k = (e, r, n) => {
13
- const o = typeof e == "number", t = typeof r == "number";
14
- return o && t ? e < r ? n === m.ASC ? -1 : 1 : e > r ? n === m.ASC ? 1 : -1 : 0 : o ? n === m.ASC ? 1 : -1 : t ? n === m.ASC ? -1 : 1 : null;
15
- }, ee = (e, r, n) => {
16
- const o = typeof e == "string", t = typeof r == "string";
17
- if (o && (e = F(e.toLocaleLowerCase())), t && (r = F(r.toLocaleLowerCase())), !o && !t)
1
+ var __defProp = Object.defineProperty;
2
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value;
3
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: !0 });
4
+ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key != "symbol" ? key + "" : key, value);
5
+ import { OnLifecycle, LifecycleStages, Inject, Disposable, Rectangle, IUniverInstanceService, ICommandService, CommandType, sequenceExecute, CellValueType, Plugin, UniverInstanceType, Injector } from "@univerjs/core";
6
+ import { getSheetCommandTarget, ReorderRangeCommand } from "@univerjs/sheets";
7
+ import { FormulaDataModel } from "@univerjs/engine-formula";
8
+ var SortType = /* @__PURE__ */ ((SortType2) => (SortType2.DESC = "desc", SortType2.ASC = "asc", SortType2))(SortType || {});
9
+ const removeStringSymbol = /* @__PURE__ */ __name((str) => str.replace(/-/gi, "").replace(/'/gi, ""), "removeStringSymbol"), compareNull = /* @__PURE__ */ __name((a1, a2) => {
10
+ const isA1Null = a1 === null || a1 === "", isA2Null = a2 === null || a2 === "";
11
+ return isA1Null && isA2Null ? 0 : isA1Null ? 1 : isA2Null ? -1 : null;
12
+ }, "compareNull"), compareNumber = /* @__PURE__ */ __name((a1, a2, type) => {
13
+ const isA1Num = typeof a1 == "number", isA2Num = typeof a2 == "number";
14
+ return isA1Num && isA2Num ? a1 < a2 ? type === SortType.ASC ? -1 : 1 : a1 > a2 ? type === SortType.ASC ? 1 : -1 : 0 : isA1Num ? type === SortType.ASC ? 1 : -1 : isA2Num ? type === SortType.ASC ? -1 : 1 : null;
15
+ }, "compareNumber"), compareString = /* @__PURE__ */ __name((a1, a2, type) => {
16
+ const isA1Str = typeof a1 == "string", isA2Str = typeof a2 == "string";
17
+ if (isA1Str && (a1 = removeStringSymbol(a1.toLocaleLowerCase())), isA2Str && (a2 = removeStringSymbol(a2.toLocaleLowerCase())), !isA1Str && !isA2Str)
18
18
  return null;
19
- if (o && t) {
20
- const s = e, u = r;
21
- return s < u ? n === m.ASC ? -1 : 1 : s > u ? n === m.ASC ? 1 : -1 : 0;
22
- }
23
- return o ? n === m.ASC ? 1 : -1 : t ? n === m.ASC ? -1 : 1 : null;
24
- }, T = (e) => !e || Object.keys(e).length === 0 || (e == null ? void 0 : e.v) == null && (e == null ? void 0 : e.p) == null;
25
- var re = Object.defineProperty, te = Object.getOwnPropertyDescriptor, ne = (e, r, n, o) => {
26
- for (var t = o > 1 ? void 0 : o ? te(r, n) : r, s = e.length - 1, u; s >= 0; s--)
27
- (u = e[s]) && (t = (o ? u(r, n, t) : u(t)) || t);
28
- return o && t && re(r, n, t), t;
29
- }, _ = (e, r) => (n, o) => r(n, o, e);
30
- let d = class extends E {
31
- constructor(r, n, o) {
19
+ if (isA1Str && isA2Str) {
20
+ const a1AsString = a1, a2AsString = a2;
21
+ return a1AsString < a2AsString ? type === SortType.ASC ? -1 : 1 : a1AsString > a2AsString ? type === SortType.ASC ? 1 : -1 : 0;
22
+ }
23
+ return isA1Str ? type === SortType.ASC ? 1 : -1 : isA2Str ? type === SortType.ASC ? -1 : 1 : null;
24
+ }, "compareString"), isNullValue = /* @__PURE__ */ __name((cell) => !cell || Object.keys(cell).length === 0 || (cell == null ? void 0 : cell.v) == null && (cell == null ? void 0 : cell.p) == null, "isNullValue");
25
+ var __defProp$2 = Object.defineProperty, __getOwnPropDesc$2 = Object.getOwnPropertyDescriptor, __decorateClass$2 = /* @__PURE__ */ __name((decorators, target, key, kind) => {
26
+ for (var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$2(target, key) : target, i = decorators.length - 1, decorator; i >= 0; i--)
27
+ (decorator = decorators[i]) && (result = (kind ? decorator(target, key, result) : decorator(result)) || result);
28
+ return kind && result && __defProp$2(target, key, result), result;
29
+ }, "__decorateClass$2"), __decorateParam$2 = /* @__PURE__ */ __name((index, decorator) => (target, key) => decorator(target, key, index), "__decorateParam$2"), _a;
30
+ let SheetsSortService = (_a = class extends Disposable {
31
+ constructor(_univerInstanceService, _commandService, _formulaDataModel) {
32
32
  super();
33
- v(this, "_compareFns", []);
34
- this._univerInstanceService = r, this._commandService = n, this._formulaDataModel = o;
33
+ __publicField(this, "_compareFns", []);
34
+ this._univerInstanceService = _univerInstanceService, this._commandService = _commandService, this._formulaDataModel = _formulaDataModel;
35
35
  }
36
- mergeCheck(r) {
37
- var l;
38
- const { unitId: n, subUnitId: o, range: t } = r, s = (l = this._univerInstanceService.getUnit(n)) == null ? void 0 : l.getSheetBySheetId(o);
39
- if (!s)
36
+ mergeCheck(location) {
37
+ var _a4;
38
+ const { unitId, subUnitId, range } = location, sheet = (_a4 = this._univerInstanceService.getUnit(unitId)) == null ? void 0 : _a4.getSheetBySheetId(subUnitId);
39
+ if (!sheet)
40
40
  return !1;
41
- const u = s.getMergeData().filter((i) => R.contains(t, i));
42
- return u.length === 0 ? !0 : oe(t, u);
41
+ const mergeDataInRange = sheet.getMergeData().filter((merge) => Rectangle.contains(range, merge));
42
+ return mergeDataInRange.length === 0 ? !0 : isRangeDividedEqually(range, mergeDataInRange);
43
43
  }
44
- emptyCheck(r) {
45
- var u;
46
- const { unitId: n, subUnitId: o, range: t } = r, s = (u = this._univerInstanceService.getUnit(n)) == null ? void 0 : u.getSheetBySheetId(o);
47
- if (!s)
44
+ emptyCheck(location) {
45
+ var _a4;
46
+ const { unitId, subUnitId, range } = location, sheet = (_a4 = this._univerInstanceService.getUnit(unitId)) == null ? void 0 : _a4.getSheetBySheetId(subUnitId);
47
+ if (!sheet)
48
48
  return !1;
49
- for (let l = t.startRow; l <= t.endRow; l++)
50
- for (let i = t.startColumn; i <= t.endColumn; i++)
51
- if (!T(s.getCellRaw(l, i)))
49
+ for (let row = range.startRow; row <= range.endRow; row++)
50
+ for (let col = range.startColumn; col <= range.endColumn; col++)
51
+ if (!isNullValue(sheet.getCellRaw(row, col)))
52
52
  return !0;
53
53
  return !1;
54
54
  }
55
- singleCheck(r) {
56
- return r.range.startRow !== r.range.endRow;
57
- }
58
- formulaCheck(r) {
59
- var u, l;
60
- const { unitId: n, subUnitId: o, range: t } = r, s = (l = (u = this._formulaDataModel.getArrayFormulaRange()) == null ? void 0 : u[n]) == null ? void 0 : l[o];
61
- for (const i in s) {
62
- const a = s[Number(i)];
63
- for (const f in a) {
64
- const g = a[Number(f)];
65
- if (g && R.intersects(t, g))
55
+ singleCheck(location) {
56
+ return location.range.startRow !== location.range.endRow;
57
+ }
58
+ formulaCheck(location) {
59
+ var _a4, _b;
60
+ const { unitId, subUnitId, range } = location, arrayFormulaRange = (_b = (_a4 = this._formulaDataModel.getArrayFormulaRange()) == null ? void 0 : _a4[unitId]) == null ? void 0 : _b[subUnitId];
61
+ for (const row in arrayFormulaRange) {
62
+ const rowData = arrayFormulaRange[Number(row)];
63
+ for (const col in rowData) {
64
+ const arrayFormula = rowData[Number(col)];
65
+ if (arrayFormula && Rectangle.intersects(range, arrayFormula))
66
66
  return !1;
67
67
  }
68
68
  }
69
69
  return !0;
70
70
  }
71
- registerCompareFn(r) {
72
- this._compareFns.unshift(r);
71
+ registerCompareFn(fn) {
72
+ this._compareFns.unshift(fn);
73
73
  }
74
74
  getAllCompareFns() {
75
75
  return this._compareFns;
76
76
  }
77
- applySort(r, n, o) {
78
- var u;
79
- const { unitId: t, subUnitId: s } = M(this._univerInstanceService) || {};
80
- this._commandService.executeCommand($.id, {
81
- orderRules: r.orderRules,
82
- range: r.range,
83
- hasTitle: (u = r.hasTitle) != null ? u : !1,
84
- unitId: n || t,
85
- subUnitId: o || s
77
+ applySort(sortOption, unitId, subUnitId) {
78
+ var _a4;
79
+ const { unitId: _unitId, subUnitId: _subUnitId } = getSheetCommandTarget(this._univerInstanceService) || {};
80
+ this._commandService.executeCommand(SortRangeCommand.id, {
81
+ orderRules: sortOption.orderRules,
82
+ range: sortOption.range,
83
+ hasTitle: (_a4 = sortOption.hasTitle) != null ? _a4 : !1,
84
+ unitId: unitId || _unitId,
85
+ subUnitId: subUnitId || _subUnitId
86
86
  });
87
87
  }
88
- };
89
- d = ne([
90
- O(P.Ready, d),
91
- _(0, U),
92
- _(1, w),
93
- _(2, I(Y))
94
- ], d);
95
- function oe(e, r) {
96
- const n = e.endRow - e.startRow + 1, o = e.endColumn - e.startColumn + 1;
97
- let t = null, s = null;
98
- const u = n * o;
99
- let l = 0;
100
- for (const i of r)
101
- if (i.startRow >= e.startRow && i.endRow <= e.endRow && i.startColumn >= e.startColumn && i.endColumn <= e.endColumn) {
102
- const a = i.endRow - i.startRow + 1, f = i.endColumn - i.startColumn + 1;
103
- if (t === null && s === null)
104
- t = a, s = f;
105
- else if (a !== t || f !== s)
88
+ }, __name(_a, "SheetsSortService"), _a);
89
+ SheetsSortService = __decorateClass$2([
90
+ OnLifecycle(LifecycleStages.Ready, SheetsSortService),
91
+ __decorateParam$2(0, IUniverInstanceService),
92
+ __decorateParam$2(1, ICommandService),
93
+ __decorateParam$2(2, Inject(FormulaDataModel))
94
+ ], SheetsSortService);
95
+ function isRangeDividedEqually(range, merges) {
96
+ const rangeRows = range.endRow - range.startRow + 1, rangeCols = range.endColumn - range.startColumn + 1;
97
+ let mergeRows = null, mergeCols = null;
98
+ const totalArea = rangeRows * rangeCols;
99
+ let totalMergeArea = 0;
100
+ for (const merge of merges)
101
+ if (merge.startRow >= range.startRow && merge.endRow <= range.endRow && merge.startColumn >= range.startColumn && merge.endColumn <= range.endColumn) {
102
+ const currentMergeRows = merge.endRow - merge.startRow + 1, currentMergeCols = merge.endColumn - merge.startColumn + 1;
103
+ if (mergeRows === null && mergeCols === null)
104
+ mergeRows = currentMergeRows, mergeCols = currentMergeCols;
105
+ else if (currentMergeRows !== mergeRows || currentMergeCols !== mergeCols)
106
106
  return !1;
107
- l += a * f;
107
+ totalMergeArea += currentMergeRows * currentMergeCols;
108
108
  }
109
- return l === u;
109
+ return totalMergeArea === totalArea;
110
110
  }
111
- const $ = {
111
+ __name(isRangeDividedEqually, "isRangeDividedEqually");
112
+ const SortRangeCommand = {
112
113
  id: "sheet.command.sort-range",
113
- type: W.COMMAND,
114
- handler: (e, r) => {
115
- const { range: n, orderRules: o, hasTitle: t, unitId: s, subUnitId: u } = r, l = e.get(d), i = e.get(U), { worksheet: a } = M(i, r) || {};
116
- if (!a)
114
+ type: CommandType.COMMAND,
115
+ handler: /* @__PURE__ */ __name((accessor, params) => {
116
+ const { range, orderRules, hasTitle, unitId, subUnitId } = params, sortService = accessor.get(SheetsSortService), univerInstanceService = accessor.get(IUniverInstanceService), { worksheet } = getSheetCommandTarget(univerInstanceService, params) || {};
117
+ if (!worksheet)
117
118
  return !1;
118
- const f = a.getMergeData().filter((c) => R.contains(n, c)), g = f.map((c) => c.startRow), { startRow: b, endRow: x } = n, j = t ? b + 1 : b, S = [], A = [];
119
- for (let c = j; c <= x; c++)
120
- a.getRowFiltered(c) || a.getRowRawVisible(c) !== !1 && (f.length && !g.includes(c) || (S.push({
121
- index: c,
122
- value: se(a, c, o)
123
- }), A.push(c)));
124
- const V = l.getAllCompareFns();
125
- S.sort(ie(o, ue(V)));
126
- const D = {};
127
- S.forEach(({ index: c, value: he }, G) => {
128
- D[A[G]] = c;
119
+ const mergeDataInRange = worksheet.getMergeData().filter((mergeData) => Rectangle.contains(range, mergeData)), mergeMainRowIndexes = mergeDataInRange.map((mergeData) => mergeData.startRow), { startRow: rangeStartRow, endRow } = range, startRow = hasTitle ? rangeStartRow + 1 : rangeStartRow, toReorder = [], oldOrder = [];
120
+ for (let rowIndex = startRow; rowIndex <= endRow; rowIndex++)
121
+ worksheet.getRowFiltered(rowIndex) || worksheet.getRowRawVisible(rowIndex) !== !1 && (mergeDataInRange.length && !mergeMainRowIndexes.includes(rowIndex) || (toReorder.push({
122
+ index: rowIndex,
123
+ value: getRowCellData(worksheet, rowIndex, orderRules)
124
+ }), oldOrder.push(rowIndex)));
125
+ const compareFns = sortService.getAllCompareFns();
126
+ toReorder.sort(reorderFnGenerator(orderRules, combineCompareFnsAsOne(compareFns)));
127
+ const order = {};
128
+ toReorder.forEach(({ index, value }, oldIndex) => {
129
+ order[oldOrder[oldIndex]] = index;
129
130
  });
130
- const L = {
131
- id: X.id,
131
+ const reorderRangeCommand = {
132
+ id: ReorderRangeCommand.id,
132
133
  params: {
133
- unitId: s,
134
- subUnitId: u,
135
- range: n,
136
- order: D
134
+ unitId,
135
+ subUnitId,
136
+ range,
137
+ order
137
138
  }
138
- }, B = e.get(w);
139
- return z([L], B).result;
140
- }
139
+ }, commandService = accessor.get(ICommandService);
140
+ return sequenceExecute([reorderRangeCommand], commandService).result;
141
+ }, "handler")
141
142
  };
142
- function se(e, r, n) {
143
- const o = [];
144
- return n.forEach(({ colIndex: t }) => {
145
- o.push(e.getCellRaw(r, t));
146
- }), o;
143
+ function getRowCellData(worksheet, rowIndex, orderRules) {
144
+ const result = [];
145
+ return orderRules.forEach(({ colIndex }) => {
146
+ result.push(worksheet.getCellRaw(rowIndex, colIndex));
147
+ }), result;
147
148
  }
148
- function ue(e) {
149
- return (r, n, o) => {
150
- for (let t = 0; t < e.length; t++) {
151
- const s = e[t](r, n, o);
152
- if (s != null)
153
- return s;
149
+ __name(getRowCellData, "getRowCellData");
150
+ function combineCompareFnsAsOne(compareFns) {
151
+ return (type, a, b) => {
152
+ for (let i = 0; i < compareFns.length; i++) {
153
+ const res = compareFns[i](type, a, b);
154
+ if (res != null)
155
+ return res;
154
156
  }
155
157
  return 0;
156
158
  };
157
159
  }
158
- function ie(e, r) {
159
- return function(n, o) {
160
- let t = null;
161
- for (let s = 0; s < e.length; s++) {
162
- const u = n.value[s], l = o.value[s];
163
- if (t = r(e[s].type, u, l), t !== 0 && t !== null && t !== void 0)
164
- return t;
160
+ __name(combineCompareFnsAsOne, "combineCompareFnsAsOne");
161
+ function reorderFnGenerator(orderRules, valueCompare) {
162
+ return function(a, b) {
163
+ let ret = null;
164
+ for (let index = 0; index < orderRules.length; index++) {
165
+ const aCellData = a.value[index], bCellData = b.value[index];
166
+ if (ret = valueCompare(orderRules[index].type, aCellData, bCellData), ret !== 0 && ret !== null && ret !== void 0)
167
+ return ret;
165
168
  }
166
169
  return 0;
167
170
  };
168
171
  }
169
- var le = Object.defineProperty, ce = Object.getOwnPropertyDescriptor, ae = (e, r, n, o) => {
170
- for (var t = o > 1 ? void 0 : o ? ce(r, n) : r, s = e.length - 1, u; s >= 0; s--)
171
- (u = e[s]) && (t = (o ? u(r, n, t) : u(t)) || t);
172
- return o && t && le(r, n, t), t;
173
- }, N = (e, r) => (n, o) => r(n, o, e);
174
- let p = class extends E {
175
- constructor(e, r) {
176
- super(), this._commandService = e, this._sortService = r, this._initCommands(), this._registerCompareFns();
172
+ __name(reorderFnGenerator, "reorderFnGenerator");
173
+ var __defProp$1 = Object.defineProperty, __getOwnPropDesc$1 = Object.getOwnPropertyDescriptor, __decorateClass$1 = /* @__PURE__ */ __name((decorators, target, key, kind) => {
174
+ for (var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc$1(target, key) : target, i = decorators.length - 1, decorator; i >= 0; i--)
175
+ (decorator = decorators[i]) && (result = (kind ? decorator(target, key, result) : decorator(result)) || result);
176
+ return kind && result && __defProp$1(target, key, result), result;
177
+ }, "__decorateClass$1"), __decorateParam$1 = /* @__PURE__ */ __name((index, decorator) => (target, key) => decorator(target, key, index), "__decorateParam$1"), _a2;
178
+ let SheetsSortController = (_a2 = class extends Disposable {
179
+ constructor(_commandService, _sortService) {
180
+ super(), this._commandService = _commandService, this._sortService = _sortService, this._initCommands(), this._registerCompareFns();
177
181
  }
178
182
  _initCommands() {
179
183
  [
180
- $
181
- ].forEach((e) => this.disposeWithMe(this._commandService.registerCommand(e)));
184
+ SortRangeCommand
185
+ ].forEach((command) => this.disposeWithMe(this._commandService.registerCommand(command)));
182
186
  }
183
187
  _registerCompareFns() {
184
- const e = (r, n, o) => {
185
- const t = this._getCommonValue(n), s = this._getCommonValue(o), u = [
186
- Z,
187
- ee,
188
- k
188
+ const commonFn = /* @__PURE__ */ __name((type, a, b) => {
189
+ const valueA = this._getCommonValue(a), valueB = this._getCommonValue(b), compareTypeFns = [
190
+ compareNull,
191
+ compareString,
192
+ compareNumber
189
193
  ];
190
- for (let l = 0; l < u.length; l++) {
191
- const i = u[l](t, s, r);
192
- if (i !== null)
193
- return i;
194
+ for (let i = 0; i < compareTypeFns.length; i++) {
195
+ const res = compareTypeFns[i](valueA, valueB, type);
196
+ if (res !== null)
197
+ return res;
194
198
  }
195
199
  return null;
196
- };
197
- this._sortService.registerCompareFn(e);
200
+ }, "commonFn");
201
+ this._sortService.registerCompareFn(commonFn);
198
202
  }
199
- _getCommonValue(e) {
200
- var n, o;
201
- if (T(e))
203
+ _getCommonValue(a) {
204
+ var _a4, _b;
205
+ if (isNullValue(a))
202
206
  return null;
203
- const r = (o = (n = e == null ? void 0 : e.p) == null ? void 0 : n.body) == null ? void 0 : o.dataStream;
204
- return r || ((e == null ? void 0 : e.t) === C.NUMBER ? Number.parseFloat(`${e.v}`) : (e == null ? void 0 : e.t) === C.STRING ? typeof e.v == "number" ? e.v : `${e.v}` : (e == null ? void 0 : e.t) === C.BOOLEAN ? `${e.v}` : (e == null ? void 0 : e.t) === C.FORCE_STRING ? Number.parseFloat(`${e.v}`) : `${e == null ? void 0 : e.v}`);
205
- }
206
- };
207
- p = ae([
208
- O(P.Ready, p),
209
- N(0, w),
210
- N(1, I(d))
211
- ], p);
212
- var me = Object.defineProperty, fe = Object.getOwnPropertyDescriptor, de = (e, r, n, o) => {
213
- for (var t = o > 1 ? void 0 : o ? fe(r, n) : r, s = e.length - 1, u; s >= 0; s--)
214
- (u = e[s]) && (t = (o ? u(r, n, t) : u(t)) || t);
215
- return o && t && me(r, n, t), t;
216
- }, ge = (e, r) => (n, o) => r(n, o, e);
217
- const ve = "UNIVER_SHEETS_SORT_PLUGIN";
218
- var h;
219
- let y = (h = class extends J {
220
- constructor(e, r) {
221
- super(), this._injector = r;
222
- }
223
- onStarting(e) {
207
+ const richTextValue = (_b = (_a4 = a == null ? void 0 : a.p) == null ? void 0 : _a4.body) == null ? void 0 : _b.dataStream;
208
+ return richTextValue || ((a == null ? void 0 : a.t) === CellValueType.NUMBER ? Number.parseFloat(`${a.v}`) : (a == null ? void 0 : a.t) === CellValueType.STRING ? typeof a.v == "number" ? a.v : `${a.v}` : (a == null ? void 0 : a.t) === CellValueType.BOOLEAN ? `${a.v}` : (a == null ? void 0 : a.t) === CellValueType.FORCE_STRING ? Number.parseFloat(`${a.v}`) : `${a == null ? void 0 : a.v}`);
209
+ }
210
+ }, __name(_a2, "SheetsSortController"), _a2);
211
+ SheetsSortController = __decorateClass$1([
212
+ OnLifecycle(LifecycleStages.Ready, SheetsSortController),
213
+ __decorateParam$1(0, ICommandService),
214
+ __decorateParam$1(1, Inject(SheetsSortService))
215
+ ], SheetsSortController);
216
+ var __defProp2 = Object.defineProperty, __getOwnPropDesc = Object.getOwnPropertyDescriptor, __decorateClass = /* @__PURE__ */ __name((decorators, target, key, kind) => {
217
+ for (var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target, i = decorators.length - 1, decorator; i >= 0; i--)
218
+ (decorator = decorators[i]) && (result = (kind ? decorator(target, key, result) : decorator(result)) || result);
219
+ return kind && result && __defProp2(target, key, result), result;
220
+ }, "__decorateClass"), __decorateParam = /* @__PURE__ */ __name((index, decorator) => (target, key) => decorator(target, key, index), "__decorateParam");
221
+ const NAME = "UNIVER_SHEETS_SORT_PLUGIN";
222
+ var _a3;
223
+ let UniverSheetsSortPlugin = (_a3 = class extends Plugin {
224
+ constructor(_config, _injector) {
225
+ super(), this._injector = _injector;
226
+ }
227
+ onStarting() {
224
228
  [
225
- [p],
226
- [d]
227
- ].forEach((r) => e.add(r));
228
- }
229
- }, v(h, "type", K.UNIVER_SHEET), v(h, "pluginName", ve), h);
230
- y = de([
231
- ge(1, I(Q))
232
- ], y);
229
+ [SheetsSortController],
230
+ [SheetsSortService]
231
+ ].forEach((d) => this._injector.add(d));
232
+ }
233
+ }, __name(_a3, "UniverSheetsSortPlugin"), __publicField(_a3, "type", UniverInstanceType.UNIVER_SHEET), __publicField(_a3, "pluginName", NAME), _a3);
234
+ UniverSheetsSortPlugin = __decorateClass([
235
+ __decorateParam(1, Inject(Injector))
236
+ ], UniverSheetsSortPlugin);
233
237
  export {
234
- d as SheetsSortService,
235
- $ as SortRangeCommand,
236
- m as SortType,
237
- y as UniverSheetsSortPlugin
238
+ SheetsSortService,
239
+ SortRangeCommand,
240
+ SortType,
241
+ UniverSheetsSortPlugin
238
242
  };
@@ -1,5 +1,4 @@
1
- import { IWorkbookData, Univer, Workbook } from '@univerjs/core';
2
- import { Dependency, Injector } from '@wendellhu/redi';
1
+ import { Dependency, IWorkbookData, Workbook, Injector, Univer } from '@univerjs/core';
3
2
 
4
3
  export interface ITestBed {
5
4
  univer: Univer;
@@ -1,10 +1,9 @@
1
- import { Plugin, UniverInstanceType } from '@univerjs/core';
2
- import { Injector } from '@wendellhu/redi';
1
+ import { Injector, Plugin, UniverInstanceType } from '@univerjs/core';
3
2
 
4
3
  export declare class UniverSheetsSortPlugin extends Plugin {
5
4
  protected readonly _injector: Injector;
6
5
  static type: UniverInstanceType;
7
6
  static pluginName: string;
8
7
  constructor(_config: unknown, _injector: Injector);
9
- onStarting(injector: Injector): void;
8
+ onStarting(): void;
10
9
  }
package/lib/umd/index.js CHANGED
@@ -1 +1 @@
1
- (function(l,i){typeof exports=="object"&&typeof module<"u"?i(exports,require("@univerjs/core"),require("@wendellhu/redi"),require("@univerjs/sheets"),require("@univerjs/engine-formula")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","@wendellhu/redi","@univerjs/sheets","@univerjs/engine-formula"],i):(l=typeof globalThis<"u"?globalThis:l||self,i(l.UniverSheetsSort={},l.UniverCore,l["@wendellhu/redi"],l.UniverSheets,l.UniverEngineFormula))})(this,function(l,i,S,p,P){"use strict";var te=Object.defineProperty;var re=(l,i,S)=>i in l?te(l,i,{enumerable:!0,configurable:!0,writable:!0,value:S}):l[i]=S;var _=(l,i,S)=>re(l,typeof i!="symbol"?i+"":i,S);var C;var d=(e=>(e.DESC="desc",e.ASC="asc",e))(d||{});const b=e=>e.replace(/-/gi,"").replace(/'/gi,""),N=(e,s)=>{const t=e===null||e==="",n=s===null||s==="";return t&&n?0:t?1:n?-1:null},O=(e,s,t)=>{const n=typeof e=="number",r=typeof s=="number";return n&&r?e<s?t===d.ASC?-1:1:e>s?t===d.ASC?1:-1:0:n?t===d.ASC?1:-1:r?t===d.ASC?-1:1:null},T=(e,s,t)=>{const n=typeof e=="string",r=typeof s=="string";if(n&&(e=b(e.toLocaleLowerCase())),r&&(s=b(s.toLocaleLowerCase())),!n&&!r)return null;if(n&&r){const o=e,u=s;return o<u?t===d.ASC?-1:1:o>u?t===d.ASC?1:-1:0}return n?t===d.ASC?1:-1:r?t===d.ASC?-1:1:null},A=e=>!e||Object.keys(e).length===0||(e==null?void 0:e.v)==null&&(e==null?void 0:e.p)==null;var j=Object.defineProperty,E=Object.getOwnPropertyDescriptor,M=(e,s,t,n)=>{for(var r=n>1?void 0:n?E(s,t):s,o=e.length-1,u;o>=0;o--)(u=e[o])&&(r=(n?u(s,t,r):u(r))||r);return n&&r&&j(s,t,r),r},R=(e,s)=>(t,n)=>s(t,n,e);l.SheetsSortService=class extends i.Disposable{constructor(t,n,r){super();_(this,"_compareFns",[]);this._univerInstanceService=t,this._commandService=n,this._formulaDataModel=r}mergeCheck(t){var a;const{unitId:n,subUnitId:r,range:o}=t,u=(a=this._univerInstanceService.getUnit(n))==null?void 0:a.getSheetBySheetId(r);if(!u)return!1;const c=u.getMergeData().filter(f=>i.Rectangle.contains(o,f));return c.length===0?!0:$(o,c)}emptyCheck(t){var c;const{unitId:n,subUnitId:r,range:o}=t,u=(c=this._univerInstanceService.getUnit(n))==null?void 0:c.getSheetBySheetId(r);if(!u)return!1;for(let a=o.startRow;a<=o.endRow;a++)for(let f=o.startColumn;f<=o.endColumn;f++)if(!A(u.getCellRaw(a,f)))return!0;return!1}singleCheck(t){return t.range.startRow!==t.range.endRow}formulaCheck(t){var c,a;const{unitId:n,subUnitId:r,range:o}=t,u=(a=(c=this._formulaDataModel.getArrayFormulaRange())==null?void 0:c[n])==null?void 0:a[r];for(const f in u){const v=u[Number(f)];for(const I in v){const g=v[Number(I)];if(g&&i.Rectangle.intersects(o,g))return!1}}return!0}registerCompareFn(t){this._compareFns.unshift(t)}getAllCompareFns(){return this._compareFns}applySort(t,n,r){var c;const{unitId:o,subUnitId:u}=p.getSheetCommandTarget(this._univerInstanceService)||{};this._commandService.executeCommand(w.id,{orderRules:t.orderRules,range:t.range,hasTitle:(c=t.hasTitle)!=null?c:!1,unitId:n||o,subUnitId:r||u})}},l.SheetsSortService=M([i.OnLifecycle(i.LifecycleStages.Ready,l.SheetsSortService),R(0,i.IUniverInstanceService),R(1,i.ICommandService),R(2,S.Inject(P.FormulaDataModel))],l.SheetsSortService);function $(e,s){const t=e.endRow-e.startRow+1,n=e.endColumn-e.startColumn+1;let r=null,o=null;const u=t*n;let c=0;for(const a of s)if(a.startRow>=e.startRow&&a.endRow<=e.endRow&&a.startColumn>=e.startColumn&&a.endColumn<=e.endColumn){const f=a.endRow-a.startRow+1,v=a.endColumn-a.startColumn+1;if(r===null&&o===null)r=f,o=v;else if(f!==r||v!==o)return!1;c+=f*v}return c===u}const w={id:"sheet.command.sort-range",type:i.CommandType.COMMAND,handler:(e,s)=>{const{range:t,orderRules:n,hasTitle:r,unitId:o,subUnitId:u}=s,c=e.get(l.SheetsSortService),a=e.get(i.IUniverInstanceService),{worksheet:f}=p.getSheetCommandTarget(a,s)||{};if(!f)return!1;const v=f.getMergeData().filter(m=>i.Rectangle.contains(t,m)),I=v.map(m=>m.startRow),{startRow:g,endRow:Q}=t,X=r?g+1:g,y=[],D=[];for(let m=X;m<=Q;m++)f.getRowFiltered(m)||f.getRowRawVisible(m)!==!1&&(v.length&&!I.includes(m)||(y.push({index:m,value:V(f,m,n)}),D.push(m)));const Y=c.getAllCompareFns();y.sort(q(n,L(Y)));const F={};y.forEach(({index:m,value:se},ee)=>{F[D[ee]]=m});const Z={id:p.ReorderRangeCommand.id,params:{unitId:o,subUnitId:u,range:t,order:F}},k=e.get(i.ICommandService);return i.sequenceExecute([Z],k).result}};function V(e,s,t){const n=[];return t.forEach(({colIndex:r})=>{n.push(e.getCellRaw(s,r))}),n}function L(e){return(s,t,n)=>{for(let r=0;r<e.length;r++){const o=e[r](s,t,n);if(o!=null)return o}return 0}}function q(e,s){return function(t,n){let r=null;for(let o=0;o<e.length;o++){const u=t.value[o],c=n.value[o];if(r=s(e[o].type,u,c),r!==0&&r!==null&&r!==void 0)return r}return 0}}var B=Object.defineProperty,G=Object.getOwnPropertyDescriptor,H=(e,s,t,n)=>{for(var r=n>1?void 0:n?G(s,t):s,o=e.length-1,u;o>=0;o--)(u=e[o])&&(r=(n?u(s,t,r):u(r))||r);return n&&r&&B(s,t,r),r},U=(e,s)=>(t,n)=>s(t,n,e);let h=class extends i.Disposable{constructor(e,s){super(),this._commandService=e,this._sortService=s,this._initCommands(),this._registerCompareFns()}_initCommands(){[w].forEach(e=>this.disposeWithMe(this._commandService.registerCommand(e)))}_registerCompareFns(){const e=(s,t,n)=>{const r=this._getCommonValue(t),o=this._getCommonValue(n),u=[N,T,O];for(let c=0;c<u.length;c++){const a=u[c](r,o,s);if(a!==null)return a}return null};this._sortService.registerCompareFn(e)}_getCommonValue(e){var t,n;if(A(e))return null;const s=(n=(t=e==null?void 0:e.p)==null?void 0:t.body)==null?void 0:n.dataStream;return s||((e==null?void 0:e.t)===i.CellValueType.NUMBER?Number.parseFloat(`${e.v}`):(e==null?void 0:e.t)===i.CellValueType.STRING?typeof e.v=="number"?e.v:`${e.v}`:(e==null?void 0:e.t)===i.CellValueType.BOOLEAN?`${e.v}`:(e==null?void 0:e.t)===i.CellValueType.FORCE_STRING?Number.parseFloat(`${e.v}`):`${e==null?void 0:e.v}`)}};h=H([i.OnLifecycle(i.LifecycleStages.Ready,h),U(0,i.ICommandService),U(1,S.Inject(l.SheetsSortService))],h);var x=Object.defineProperty,W=Object.getOwnPropertyDescriptor,z=(e,s,t,n)=>{for(var r=n>1?void 0:n?W(s,t):s,o=e.length-1,u;o>=0;o--)(u=e[o])&&(r=(n?u(s,t,r):u(r))||r);return n&&r&&x(s,t,r),r},J=(e,s)=>(t,n)=>s(t,n,e);const K="UNIVER_SHEETS_SORT_PLUGIN";l.UniverSheetsSortPlugin=(C=class extends i.Plugin{constructor(s,t){super(),this._injector=t}onStarting(s){[[h],[l.SheetsSortService]].forEach(t=>s.add(t))}},_(C,"type",i.UniverInstanceType.UNIVER_SHEET),_(C,"pluginName",K),C),l.UniverSheetsSortPlugin=z([J(1,S.Inject(S.Injector))],l.UniverSheetsSortPlugin),l.SortRangeCommand=w,l.SortType=d,Object.defineProperty(l,Symbol.toStringTag,{value:"Module"})});
1
+ (function(global,factory){typeof exports=="object"&&typeof module<"u"?factory(exports,require("@univerjs/core"),require("@univerjs/sheets"),require("@univerjs/engine-formula")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","@univerjs/sheets","@univerjs/engine-formula"],factory):(global=typeof globalThis<"u"?globalThis:global||self,factory(global.UniverSheetsSort={},global.UniverCore,global.UniverSheets,global.UniverEngineFormula))})(this,function(exports2,core,sheets,engineFormula){"use strict";var __defProp=Object.defineProperty;var __defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value;var __name=(target,value)=>__defProp(target,"name",{value,configurable:!0});var __publicField=(obj,key,value)=>__defNormalProp(obj,typeof key!="symbol"?key+"":key,value);var _a,_b,_c;var SortType=(SortType2=>(SortType2.DESC="desc",SortType2.ASC="asc",SortType2))(SortType||{});const removeStringSymbol=__name(str=>str.replace(/-/gi,"").replace(/'/gi,""),"removeStringSymbol"),compareNull=__name((a1,a2)=>{const isA1Null=a1===null||a1==="",isA2Null=a2===null||a2==="";return isA1Null&&isA2Null?0:isA1Null?1:isA2Null?-1:null},"compareNull"),compareNumber=__name((a1,a2,type)=>{const isA1Num=typeof a1=="number",isA2Num=typeof a2=="number";return isA1Num&&isA2Num?a1<a2?type===SortType.ASC?-1:1:a1>a2?type===SortType.ASC?1:-1:0:isA1Num?type===SortType.ASC?1:-1:isA2Num?type===SortType.ASC?-1:1:null},"compareNumber"),compareString=__name((a1,a2,type)=>{const isA1Str=typeof a1=="string",isA2Str=typeof a2=="string";if(isA1Str&&(a1=removeStringSymbol(a1.toLocaleLowerCase())),isA2Str&&(a2=removeStringSymbol(a2.toLocaleLowerCase())),!isA1Str&&!isA2Str)return null;if(isA1Str&&isA2Str){const a1AsString=a1,a2AsString=a2;return a1AsString<a2AsString?type===SortType.ASC?-1:1:a1AsString>a2AsString?type===SortType.ASC?1:-1:0}return isA1Str?type===SortType.ASC?1:-1:isA2Str?type===SortType.ASC?-1:1:null},"compareString"),isNullValue=__name(cell=>!cell||Object.keys(cell).length===0||(cell==null?void 0:cell.v)==null&&(cell==null?void 0:cell.p)==null,"isNullValue");var __defProp$2=Object.defineProperty,__getOwnPropDesc$2=Object.getOwnPropertyDescriptor,__decorateClass$2=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$2(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$2(target,key,result),result},"__decorateClass$2"),__decorateParam$2=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$2");exports2.SheetsSortService=(_a=class extends core.Disposable{constructor(_univerInstanceService,_commandService,_formulaDataModel){super();__publicField(this,"_compareFns",[]);this._univerInstanceService=_univerInstanceService,this._commandService=_commandService,this._formulaDataModel=_formulaDataModel}mergeCheck(location){var _a2;const{unitId,subUnitId,range}=location,sheet=(_a2=this._univerInstanceService.getUnit(unitId))==null?void 0:_a2.getSheetBySheetId(subUnitId);if(!sheet)return!1;const mergeDataInRange=sheet.getMergeData().filter(merge=>core.Rectangle.contains(range,merge));return mergeDataInRange.length===0?!0:isRangeDividedEqually(range,mergeDataInRange)}emptyCheck(location){var _a2;const{unitId,subUnitId,range}=location,sheet=(_a2=this._univerInstanceService.getUnit(unitId))==null?void 0:_a2.getSheetBySheetId(subUnitId);if(!sheet)return!1;for(let row=range.startRow;row<=range.endRow;row++)for(let col=range.startColumn;col<=range.endColumn;col++)if(!isNullValue(sheet.getCellRaw(row,col)))return!0;return!1}singleCheck(location){return location.range.startRow!==location.range.endRow}formulaCheck(location){var _a2,_b2;const{unitId,subUnitId,range}=location,arrayFormulaRange=(_b2=(_a2=this._formulaDataModel.getArrayFormulaRange())==null?void 0:_a2[unitId])==null?void 0:_b2[subUnitId];for(const row in arrayFormulaRange){const rowData=arrayFormulaRange[Number(row)];for(const col in rowData){const arrayFormula=rowData[Number(col)];if(arrayFormula&&core.Rectangle.intersects(range,arrayFormula))return!1}}return!0}registerCompareFn(fn){this._compareFns.unshift(fn)}getAllCompareFns(){return this._compareFns}applySort(sortOption,unitId,subUnitId){var _a2;const{unitId:_unitId,subUnitId:_subUnitId}=sheets.getSheetCommandTarget(this._univerInstanceService)||{};this._commandService.executeCommand(SortRangeCommand.id,{orderRules:sortOption.orderRules,range:sortOption.range,hasTitle:(_a2=sortOption.hasTitle)!=null?_a2:!1,unitId:unitId||_unitId,subUnitId:subUnitId||_subUnitId})}},__name(_a,"SheetsSortService"),_a),exports2.SheetsSortService=__decorateClass$2([core.OnLifecycle(core.LifecycleStages.Ready,exports2.SheetsSortService),__decorateParam$2(0,core.IUniverInstanceService),__decorateParam$2(1,core.ICommandService),__decorateParam$2(2,core.Inject(engineFormula.FormulaDataModel))],exports2.SheetsSortService);function isRangeDividedEqually(range,merges){const rangeRows=range.endRow-range.startRow+1,rangeCols=range.endColumn-range.startColumn+1;let mergeRows=null,mergeCols=null;const totalArea=rangeRows*rangeCols;let totalMergeArea=0;for(const merge of merges)if(merge.startRow>=range.startRow&&merge.endRow<=range.endRow&&merge.startColumn>=range.startColumn&&merge.endColumn<=range.endColumn){const currentMergeRows=merge.endRow-merge.startRow+1,currentMergeCols=merge.endColumn-merge.startColumn+1;if(mergeRows===null&&mergeCols===null)mergeRows=currentMergeRows,mergeCols=currentMergeCols;else if(currentMergeRows!==mergeRows||currentMergeCols!==mergeCols)return!1;totalMergeArea+=currentMergeRows*currentMergeCols}return totalMergeArea===totalArea}__name(isRangeDividedEqually,"isRangeDividedEqually");const SortRangeCommand={id:"sheet.command.sort-range",type:core.CommandType.COMMAND,handler:__name((accessor,params)=>{const{range,orderRules,hasTitle,unitId,subUnitId}=params,sortService=accessor.get(exports2.SheetsSortService),univerInstanceService=accessor.get(core.IUniverInstanceService),{worksheet}=sheets.getSheetCommandTarget(univerInstanceService,params)||{};if(!worksheet)return!1;const mergeDataInRange=worksheet.getMergeData().filter(mergeData=>core.Rectangle.contains(range,mergeData)),mergeMainRowIndexes=mergeDataInRange.map(mergeData=>mergeData.startRow),{startRow:rangeStartRow,endRow}=range,startRow=hasTitle?rangeStartRow+1:rangeStartRow,toReorder=[],oldOrder=[];for(let rowIndex=startRow;rowIndex<=endRow;rowIndex++)worksheet.getRowFiltered(rowIndex)||worksheet.getRowRawVisible(rowIndex)!==!1&&(mergeDataInRange.length&&!mergeMainRowIndexes.includes(rowIndex)||(toReorder.push({index:rowIndex,value:getRowCellData(worksheet,rowIndex,orderRules)}),oldOrder.push(rowIndex)));const compareFns=sortService.getAllCompareFns();toReorder.sort(reorderFnGenerator(orderRules,combineCompareFnsAsOne(compareFns)));const order={};toReorder.forEach(({index,value},oldIndex)=>{order[oldOrder[oldIndex]]=index});const reorderRangeCommand={id:sheets.ReorderRangeCommand.id,params:{unitId,subUnitId,range,order}},commandService=accessor.get(core.ICommandService);return core.sequenceExecute([reorderRangeCommand],commandService).result},"handler")};function getRowCellData(worksheet,rowIndex,orderRules){const result=[];return orderRules.forEach(({colIndex})=>{result.push(worksheet.getCellRaw(rowIndex,colIndex))}),result}__name(getRowCellData,"getRowCellData");function combineCompareFnsAsOne(compareFns){return(type,a,b)=>{for(let i=0;i<compareFns.length;i++){const res=compareFns[i](type,a,b);if(res!=null)return res}return 0}}__name(combineCompareFnsAsOne,"combineCompareFnsAsOne");function reorderFnGenerator(orderRules,valueCompare){return function(a,b){let ret=null;for(let index=0;index<orderRules.length;index++){const aCellData=a.value[index],bCellData=b.value[index];if(ret=valueCompare(orderRules[index].type,aCellData,bCellData),ret!==0&&ret!==null&&ret!==void 0)return ret}return 0}}__name(reorderFnGenerator,"reorderFnGenerator");var __defProp$1=Object.defineProperty,__getOwnPropDesc$1=Object.getOwnPropertyDescriptor,__decorateClass$1=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$1(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp$1(target,key,result),result},"__decorateClass$1"),__decorateParam$1=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$1");let SheetsSortController=(_b=class extends core.Disposable{constructor(_commandService,_sortService){super(),this._commandService=_commandService,this._sortService=_sortService,this._initCommands(),this._registerCompareFns()}_initCommands(){[SortRangeCommand].forEach(command=>this.disposeWithMe(this._commandService.registerCommand(command)))}_registerCompareFns(){const commonFn=__name((type,a,b)=>{const valueA=this._getCommonValue(a),valueB=this._getCommonValue(b),compareTypeFns=[compareNull,compareString,compareNumber];for(let i=0;i<compareTypeFns.length;i++){const res=compareTypeFns[i](valueA,valueB,type);if(res!==null)return res}return null},"commonFn");this._sortService.registerCompareFn(commonFn)}_getCommonValue(a){var _a2,_b2;if(isNullValue(a))return null;const richTextValue=(_b2=(_a2=a==null?void 0:a.p)==null?void 0:_a2.body)==null?void 0:_b2.dataStream;return richTextValue||((a==null?void 0:a.t)===core.CellValueType.NUMBER?Number.parseFloat(`${a.v}`):(a==null?void 0:a.t)===core.CellValueType.STRING?typeof a.v=="number"?a.v:`${a.v}`:(a==null?void 0:a.t)===core.CellValueType.BOOLEAN?`${a.v}`:(a==null?void 0:a.t)===core.CellValueType.FORCE_STRING?Number.parseFloat(`${a.v}`):`${a==null?void 0:a.v}`)}},__name(_b,"SheetsSortController"),_b);SheetsSortController=__decorateClass$1([core.OnLifecycle(core.LifecycleStages.Ready,SheetsSortController),__decorateParam$1(0,core.ICommandService),__decorateParam$1(1,core.Inject(exports2.SheetsSortService))],SheetsSortController);var __defProp2=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__decorateClass=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc(target,key):target,i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=(kind?decorator(target,key,result):decorator(result))||result);return kind&&result&&__defProp2(target,key,result),result},"__decorateClass"),__decorateParam=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam");const NAME="UNIVER_SHEETS_SORT_PLUGIN";exports2.UniverSheetsSortPlugin=(_c=class extends core.Plugin{constructor(_config,_injector){super(),this._injector=_injector}onStarting(){[[SheetsSortController],[exports2.SheetsSortService]].forEach(d=>this._injector.add(d))}},__name(_c,"UniverSheetsSortPlugin"),__publicField(_c,"type",core.UniverInstanceType.UNIVER_SHEET),__publicField(_c,"pluginName",NAME),_c),exports2.UniverSheetsSortPlugin=__decorateClass([__decorateParam(1,core.Inject(core.Injector))],exports2.UniverSheetsSortPlugin),exports2.SortRangeCommand=SortRangeCommand,exports2.SortType=SortType,Object.defineProperty(exports2,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@univerjs/sheets-sort",
3
- "version": "0.2.4",
3
+ "version": "0.2.6",
4
4
  "private": false,
5
5
  "description": "A library for sorting data in Univer Sheet",
6
6
  "author": "DreamNum <developer@univer.ai>",
@@ -45,21 +45,19 @@
45
45
  "lib"
46
46
  ],
47
47
  "peerDependencies": {
48
- "@wendellhu/redi": "0.16.0",
49
- "@univerjs/core": "0.2.4",
50
- "@univerjs/engine-formula": "0.2.4",
51
- "@univerjs/sheets": "0.2.4"
48
+ "@univerjs/engine-formula": "0.2.6",
49
+ "@univerjs/sheets": "0.2.6",
50
+ "@univerjs/core": "0.2.6"
52
51
  },
53
52
  "devDependencies": {
54
- "@wendellhu/redi": "0.16.0",
55
53
  "rxjs": "^7.8.1",
56
- "typescript": "^5.5.3",
57
- "vite": "^5.3.4",
58
- "vitest": "^2.0.3",
59
- "@univerjs/engine-formula": "0.2.4",
60
- "@univerjs/core": "0.2.4",
61
- "@univerjs/shared": "0.2.4",
62
- "@univerjs/sheets": "0.2.4"
54
+ "typescript": "^5.5.4",
55
+ "vite": "^5.3.5",
56
+ "vitest": "^2.0.4",
57
+ "@univerjs/engine-formula": "0.2.6",
58
+ "@univerjs/core": "0.2.6",
59
+ "@univerjs/shared": "0.2.6",
60
+ "@univerjs/sheets": "0.2.6"
63
61
  },
64
62
  "univerSpace": {
65
63
  ".": {