@univerjs/data-validation 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 +1 -1
- package/lib/es/index.js +597 -593
- package/lib/types/commands/commands/data-validation.command.d.ts +1 -2
- package/lib/types/commands/mutations/data-validation.mutation.d.ts +4 -0
- package/lib/types/common/util.d.ts +1 -2
- package/lib/types/index.d.ts +1 -1
- package/lib/types/models/data-validation-manager.d.ts +1 -2
- package/lib/types/models/data-validation-model.d.ts +7 -5
- package/lib/types/plugin.d.ts +2 -3
- package/lib/types/services/data-validator-registry.service.d.ts +1 -1
- package/lib/types/validators/base-data-validator.d.ts +1 -2
- package/lib/umd/index.js +1 -1
- package/package.json +9 -11
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { ICommand, IDataValidationRule, IDataValidationRuleBase, IDataValidationRuleOptions, IMutationInfo, IRange } from '@univerjs/core';
|
|
2
|
-
import { Injector } from '@wendellhu/redi';
|
|
1
|
+
import { ICommand, IDataValidationRule, IDataValidationRuleBase, IDataValidationRuleOptions, IMutationInfo, Injector, IRange } from '@univerjs/core';
|
|
3
2
|
import { ISheetCommandSharedParams } from '@univerjs/sheets';
|
|
4
3
|
import { IRemoveDataValidationMutationParams } from '../mutations/data-validation.mutation';
|
|
5
4
|
|
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
import { ICommand, IDataValidationRule } from '@univerjs/core';
|
|
2
2
|
import { ISheetCommandSharedParams } from '@univerjs/sheets';
|
|
3
3
|
import { IUpdateRulePayload } from '../../types/interfaces/i-update-rule-payload';
|
|
4
|
+
import { DataValidationChangeSource } from '../../models/data-validation-model';
|
|
4
5
|
|
|
5
6
|
export interface IAddDataValidationMutationParams extends ISheetCommandSharedParams {
|
|
6
7
|
rule: IDataValidationRule | IDataValidationRule[];
|
|
7
8
|
index?: number;
|
|
9
|
+
source?: DataValidationChangeSource;
|
|
8
10
|
}
|
|
9
11
|
export declare const AddDataValidationMutation: ICommand<IAddDataValidationMutationParams>;
|
|
10
12
|
export interface IRemoveDataValidationMutationParams extends ISheetCommandSharedParams {
|
|
11
13
|
ruleId: string | string[];
|
|
14
|
+
source?: DataValidationChangeSource;
|
|
12
15
|
}
|
|
13
16
|
export declare const RemoveDataValidationMutation: ICommand<IRemoveDataValidationMutationParams>;
|
|
14
17
|
export interface IUpdateDataValidationMutationParams extends ISheetCommandSharedParams {
|
|
15
18
|
payload: IUpdateRulePayload;
|
|
16
19
|
ruleId: string;
|
|
20
|
+
source?: DataValidationChangeSource;
|
|
17
21
|
}
|
|
18
22
|
export declare const UpdateDataValidationMutation: ICommand<IUpdateDataValidationMutationParams>;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { IAccessor } from '@wendellhu/redi';
|
|
1
|
+
import { IAccessor, IDataValidationRuleBase, IDataValidationRuleOptions, DataValidationOperator, DataValidationType } from '@univerjs/core';
|
|
3
2
|
|
|
4
3
|
export declare function getRuleSetting(rule: IDataValidationRuleBase): IDataValidationRuleBase;
|
|
5
4
|
export declare function getRuleOptions(rule: IDataValidationRuleOptions): IDataValidationRuleOptions;
|
package/lib/types/index.d.ts
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
export { UniverDataValidationPlugin } from './plugin';
|
|
17
17
|
export { DataValidatorRegistryService, DataValidatorRegistryScope } from './services/data-validator-registry.service';
|
|
18
|
-
export { DataValidationModel } from './models/data-validation-model';
|
|
18
|
+
export { DataValidationModel, type DataValidationChangeSource } from './models/data-validation-model';
|
|
19
19
|
export { createDefaultNewRule, getRuleOptions, getRuleSetting, } from './common/util';
|
|
20
20
|
export { UpdateRuleType } from './types/enum/update-rule-type';
|
|
21
21
|
export type { IDataValidatorOperatorConfig } from './types/interfaces/i-data-validator-operator-config';
|
|
@@ -8,9 +8,8 @@ export declare class DataValidationManager<T extends IDataValidationRule> extend
|
|
|
8
8
|
readonly unitId: string;
|
|
9
9
|
readonly subUnitId: string;
|
|
10
10
|
readonly dataValidations$: import('rxjs').Observable<T[]>;
|
|
11
|
-
constructor(unitId: string, subUnitId: string
|
|
11
|
+
constructor(unitId: string, subUnitId: string);
|
|
12
12
|
private _notice;
|
|
13
|
-
private _insertRules;
|
|
14
13
|
getRuleById(id: string): T | undefined;
|
|
15
14
|
getRuleIndex(id: string): number;
|
|
16
15
|
addRule(rule: T | T[], index?: number): void;
|
|
@@ -2,12 +2,14 @@ import { CellValue, DataValidationStatus, Disposable, IDataValidationRule, ILogS
|
|
|
2
2
|
import { IUpdateRulePayload } from '../types/interfaces/i-update-rule-payload';
|
|
3
3
|
import { DataValidationManager } from './data-validation-manager';
|
|
4
4
|
|
|
5
|
-
type
|
|
5
|
+
type DataValidationChangeType = 'update' | 'add' | 'remove';
|
|
6
|
+
export type DataValidationChangeSource = 'command' | 'patched';
|
|
6
7
|
export interface IRuleChange<T extends IDataValidationRule> {
|
|
7
8
|
rule?: T;
|
|
8
|
-
type:
|
|
9
|
+
type: DataValidationChangeType;
|
|
9
10
|
unitId: string;
|
|
10
11
|
subUnitId: string;
|
|
12
|
+
source: DataValidationChangeSource;
|
|
11
13
|
}
|
|
12
14
|
export interface IValidStatusChange {
|
|
13
15
|
unitId: string;
|
|
@@ -28,9 +30,9 @@ export declare class DataValidationModel<T extends IDataValidationRule = IDataVa
|
|
|
28
30
|
setManagerCreator(creator: (unitId: string, subUnitId: string) => DataValidationManager<T>): void;
|
|
29
31
|
ensureManager(unitId: string, subUnitId: string): DataValidationManager<T>;
|
|
30
32
|
private _addRuleSideEffect;
|
|
31
|
-
addRule(unitId: string, subUnitId: string, rule: T | T[], index?: number): void;
|
|
32
|
-
updateRule(unitId: string, subUnitId: string, ruleId: string, payload: IUpdateRulePayload): void;
|
|
33
|
-
removeRule(unitId: string, subUnitId: string, ruleId: string): void;
|
|
33
|
+
addRule(unitId: string, subUnitId: string, rule: T | T[], source: DataValidationChangeSource, index?: number): void;
|
|
34
|
+
updateRule(unitId: string, subUnitId: string, ruleId: string, payload: IUpdateRulePayload, source: DataValidationChangeSource): void;
|
|
35
|
+
removeRule(unitId: string, subUnitId: string, ruleId: string, source: DataValidationChangeSource): void;
|
|
34
36
|
getRuleById(unitId: string, subUnitId: string, ruleId: string): T | undefined;
|
|
35
37
|
getRuleIndex(unitId: string, subUnitId: string, ruleId: string): number;
|
|
36
38
|
getRules(unitId: string, subUnitId: string): T[];
|
package/lib/types/plugin.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { ICommandService, Plugin, UniverInstanceType } from '@univerjs/core';
|
|
2
|
-
import { Injector } from '@wendellhu/redi';
|
|
1
|
+
import { ICommandService, Injector, Plugin, UniverInstanceType } from '@univerjs/core';
|
|
3
2
|
|
|
4
3
|
export declare class UniverDataValidationPlugin extends Plugin {
|
|
5
4
|
protected _injector: Injector;
|
|
@@ -7,5 +6,5 @@ export declare class UniverDataValidationPlugin extends Plugin {
|
|
|
7
6
|
static pluginName: string;
|
|
8
7
|
static type: UniverInstanceType;
|
|
9
8
|
constructor(_config: unknown, _injector: Injector, _commandService: ICommandService);
|
|
10
|
-
onStarting(
|
|
9
|
+
onStarting(): void;
|
|
11
10
|
}
|
|
@@ -13,7 +13,7 @@ export declare class DataValidatorRegistryService {
|
|
|
13
13
|
validatorsChange$: import('rxjs').Observable<void>;
|
|
14
14
|
private _addValidatorToScope;
|
|
15
15
|
private _removeValidatorFromScope;
|
|
16
|
-
register(validator: BaseDataValidator<any>): import('@
|
|
16
|
+
register(validator: BaseDataValidator<any>): import('@univerjs/core').IDisposable;
|
|
17
17
|
getValidatorItem(id: string): BaseDataValidator<import('@univerjs/core').CellValue> | undefined;
|
|
18
18
|
getValidatorsByScope(scope: string): BaseDataValidator<import('@univerjs/core').CellValue>[] | undefined;
|
|
19
19
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { CellValue, IDataValidationRule, IDataValidationRuleBase, Nullable, DataValidationOperator, LocaleService } from '@univerjs/core';
|
|
2
|
-
import { Injector } from '@wendellhu/redi';
|
|
1
|
+
import { CellValue, IDataValidationRule, IDataValidationRuleBase, Nullable, DataValidationOperator, Injector, LocaleService } from '@univerjs/core';
|
|
3
2
|
import { IBaseDataValidationWidget } from './base-widget';
|
|
4
3
|
|
|
5
4
|
export interface IValidatorCellInfo<DataType = Nullable<CellValue>> {
|
package/lib/umd/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(s,n){typeof exports=="object"&&typeof module<"u"?n(exports,require("@univerjs/core"),require("@wendellhu/redi"),require("rxjs"),require("@univerjs/sheets")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","@wendellhu/redi","rxjs","@univerjs/sheets"],n):(s=typeof globalThis<"u"?globalThis:s||self,n(s.UniverDataValidation={},s.UniverCore,s["@wendellhu/redi"],s.rxjs,s.UniverSheets))})(this,function(s,n,m,S,T){"use strict";var ga=Object.defineProperty;var Va=(s,n,m)=>n in s?ga(s,n,{enumerable:!0,configurable:!0,writable:!0,value:m}):s[n]=m;var h=(s,n,m)=>Va(s,typeof n!="symbol"?n+"":n,m);var f;var C=(r=>(r.SHEET="sheet",r))(C||{});class I{constructor(){h(this,"_validatorByScopes",new Map);h(this,"_validatorMap",new Map);h(this,"_validatorsChange$",new S.BehaviorSubject(void 0));h(this,"validatorsChange$",this._validatorsChange$.asObservable())}_addValidatorToScope(e,a){this._validatorByScopes.has(a)||this._validatorByScopes.set(a,[]);const t=this._validatorByScopes.get(a);if(t.findIndex(i=>i.id===e.id)>-1)throw new Error(`Validator item with the same id ${e.id} has already been added!`);t.push(e)}_removeValidatorFromScope(e,a){const t=this._validatorByScopes.get(a);if(!t)return;const i=t.findIndex(o=>o.id===e.id);i>-1&&t.splice(i,1)}register(e){return this._validatorMap.set(e.id,e),Array.isArray(e.scopes)?e.scopes.forEach(a=>{this._addValidatorToScope(e,a)}):this._addValidatorToScope(e,e.scopes),this._validatorsChange$.next(),n.toDisposable(()=>{this._validatorMap.delete(e.id),Array.isArray(e.scopes)?e.scopes.forEach(a=>{this._removeValidatorFromScope(e,a)}):this._removeValidatorFromScope(e,e.scopes),this._validatorsChange$.next()})}getValidatorItem(e){return this._validatorMap.get(e)}getValidatorsByScope(e){return this._validatorByScopes.get(e)}}var g=(r=>(r[r.SETTING=0]="SETTING",r[r.RANGE=1]="RANGE",r[r.OPTIONS=2]="OPTIONS",r))(g||{});function M(r){return{type:r.type,operator:r.operator,formula1:r.formula1,formula2:r.formula2,allowBlank:r.allowBlank}}function R(r){return{error:r.error,errorStyle:r.errorStyle,errorTitle:r.errorTitle,imeMode:r.imeMode,prompt:r.prompt,promptTitle:r.promptTitle,showDropDown:r.showDropDown,showErrorMessage:r.showErrorMessage,showInputMessage:r.showInputMessage,renderMode:r.renderMode,bizInfo:r.bizInfo}}function G(r){const a=r.get(T.SheetsSelectionsService).getCurrentSelections().map(o=>o.range);return{uid:n.Tools.generateRandomId(6),type:n.DataValidationType.DECIMAL,operator:n.DataValidationOperator.EQUAL,formula1:"100",ranges:a!=null?a:[{startColumn:0,endColumn:0,startRow:0,endRow:0}]}}class U extends n.Disposable{constructor(a,t,i){super();h(this,"_dataValidations");h(this,"_dataValidationMap",new Map);h(this,"_dataValidations$",new S.Subject);h(this,"unitId");h(this,"subUnitId");h(this,"dataValidations$",this._dataValidations$.asObservable());this.unitId=a,this.subUnitId=t,i&&(this._insertRules(i),this._notice(),this.disposeWithMe({dispose:()=>{this._dataValidations$.complete()}}))}_notice(){this._dataValidations$.next(this._dataValidations)}_insertRules(a){this._dataValidations=a,a.forEach(t=>{this._dataValidationMap.set(t.uid,t)})}getRuleById(a){return this._dataValidationMap.get(a)}getRuleIndex(a){return this._dataValidations.findIndex(t=>t.uid===a)}addRule(a,t){const o=(Array.isArray(a)?a:[a]).filter(d=>!this._dataValidationMap.has(d.uid));typeof t=="number"&&t<this._dataValidations.length?this._dataValidations.splice(t,0,...o):this._dataValidations.push(...o),o.forEach(d=>{this._dataValidationMap.set(d.uid,d)}),this._notice()}removeRule(a){const t=this._dataValidations.findIndex(i=>i.uid===a);t>-1&&(this._dataValidations.splice(t,1),this._dataValidationMap.delete(a),this._notice())}updateRule(a,t){const i=this._dataValidationMap.get(a),o=this._dataValidations.findIndex(l=>a===l.uid);if(!i)throw new Error(`Data validation rule is not found, ruleId: ${a}.`);const d={...i};switch(t.type){case g.RANGE:{d.ranges=t.payload;break}case g.SETTING:{Object.assign(d,M(t.payload));break}case g.OPTIONS:{Object.assign(d,R(t.payload));break}}return this._dataValidations[o]=d,this._dataValidationMap.set(a,d),this._notice(),d}getDataValidations(){return this._dataValidations}toJSON(){return this._dataValidations}validator(a,t,i,o){return n.DataValidationStatus.VALID}}var Q=Object.defineProperty,W=Object.getOwnPropertyDescriptor,F=(r,e,a,t)=>{for(var i=t>1?void 0:t?W(e,a):e,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(e,a,i):d(i))||i);return t&&i&&Q(e,a,i),i},J=(r,e)=>(a,t)=>e(a,t,r);s.DataValidationModel=class extends n.Disposable{constructor(a){super();h(this,"_model",new Map);h(this,"_managerCreator",(a,t)=>new U(a,t,[]));h(this,"_ruleChange$",new S.Subject);h(this,"_validStatusChange$",new S.Subject);h(this,"ruleChange$",this._ruleChange$.asObservable());h(this,"ruleChangeDebounce$",this.ruleChange$.pipe(S.debounceTime(20)));h(this,"validStatusChange$",this._validStatusChange$.asObservable().pipe(S.debounceTime(20)));this._logService=a,this.disposeWithMe({dispose:()=>{this._ruleChange$.complete(),this._validStatusChange$.complete()}})}setManagerCreator(a){this._managerCreator=a}ensureManager(a,t){this._model.has(a)||this._model.set(a,new Map);const i=this._model.get(a);if(i.has(t))return i.get(t);const o=this._managerCreator(a,t);return i.set(t,o),o}_addRuleSideEffect(a,t,i){this.ensureManager(a,t).getRuleById(i.uid)||this._ruleChange$.next({rule:i,type:"add",unitId:a,subUnitId:t})}addRule(a,t,i,o){try{const d=this.ensureManager(a,t);(Array.isArray(i)?i:[i]).forEach(u=>{this._addRuleSideEffect(a,t,u)}),d.addRule(i,o)}catch(d){this._logService.error(d)}}updateRule(a,t,i,o){try{const l=this.ensureManager(a,t).updateRule(i,o);this._ruleChange$.next({rule:l,type:"update",unitId:a,subUnitId:t})}catch(d){this._logService.error(d)}}removeRule(a,t,i){try{const o=this.ensureManager(a,t),d=o.getRuleById(i);d&&(o.removeRule(i),this._ruleChange$.next({rule:d,type:"remove",unitId:a,subUnitId:t}))}catch(o){this._logService.error(o)}}getRuleById(a,t,i){return this.ensureManager(a,t).getRuleById(i)}getRuleIndex(a,t,i){return this.ensureManager(a,t).getRuleIndex(i)}getRules(a,t){return this.ensureManager(a,t).getDataValidations()}validator(a,t,i){const{unitId:o,subUnitId:d}=i;return this.ensureManager(o,d).validator(a,t,i,(u,c)=>{c&&this._validStatusChange$.next({unitId:o,subUnitId:d,ruleId:t.uid,status:u})})}getUnitRules(a){const t=this._model.get(a);if(!t)return[];const i=[];return t.forEach(o=>{i.push([o.subUnitId,o.getDataValidations()])}),i}deleteUnitRules(a){this._model.delete(a)}getSubUnitIds(a){var t,i;return Array.from((i=(t=this._model.get(a))==null?void 0:t.keys())!=null?i:[])}},s.DataValidationModel=F([J(0,n.ILogService)],s.DataValidationModel);const V={type:n.CommandType.MUTATION,id:"data-validation.mutation.addRule",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t,rule:i,index:o}=e;return r.get(s.DataValidationModel).addRule(a,t,i,o),!0}},v={type:n.CommandType.MUTATION,id:"data-validation.mutation.removeRule",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t,ruleId:i}=e,o=r.get(s.DataValidationModel);return Array.isArray(i)?i.forEach(d=>{o.removeRule(a,t,d)}):o.removeRule(a,t,i),!0}},E={type:n.CommandType.MUTATION,id:"data-validation.mutation.updateRule",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t,ruleId:i,payload:o}=e;return r.get(s.DataValidationModel).updateRule(a,t,i,o),!0}},L={type:n.CommandType.COMMAND,id:"data-validation.command.addRule",async handler(r,e){if(r.get(n.ILogService).warn("[Deprecated] AddDataValidationCommand is deprecated, please use AddSheetDataValidationCommand in @univerjs/sheets-data-validation instead!"),!e)return!1;const{rule:t,unitId:i,subUnitId:o}=e,d=r.get(n.ICommandService),l=r.get(n.IUndoRedoService),u={...e,rule:{...e.rule,ranges:[e.rule.range]}},c=[{id:V.id,params:u}],p=[{id:v.id,params:{unitId:i,subUnitId:o,ruleId:t.uid}}];return l.pushUndoRedo({unitID:i,redoMutations:c,undoMutations:p}),await d.executeCommand(V.id,u),!0}},z=(r,e)=>{const a=r.get(s.DataValidationModel),{unitId:t,subUnitId:i,ruleId:o}=e;if(Array.isArray(o)){const l=o.map(u=>a.getRuleById(t,i,u)).filter(Boolean);return[{id:V.id,params:{unitId:t,subUnitId:i,rule:l}}]}return[{id:V.id,params:{unitId:t,subUnitId:i,rule:{...a.getRuleById(t,i,o)},index:a.getRuleIndex(t,i,o)}}]},w={type:n.CommandType.COMMAND,id:"data-validation.command.removeRule",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t,ruleId:i}=e,o=r.get(n.ICommandService),d=r.get(n.IUndoRedoService),l=r.get(s.DataValidationModel),u=[{id:v.id,params:e}],c=[{id:V.id,params:{unitId:a,subUnitId:t,rule:{...l.getRuleById(a,t,i)},index:l.getRuleIndex(a,t,i)}}];return d.pushUndoRedo({undoMutations:c,redoMutations:u,unitID:e.unitId}),o.executeCommand(v.id,e),!0}},b={type:n.CommandType.COMMAND,id:"data-validation.command.updateDataValidationSetting",handler(r,e){if(r.get(n.ILogService).warn("[Deprecated] UpdateDataValidationOptionsCommand is deprecated, please use UpdateSheetDataValidationOptionsCommand in @univerjs/sheets-data-validation instead!"),!e)return!1;const t=r.get(n.ICommandService),i=r.get(n.IUndoRedoService),o=r.get(s.DataValidationModel),{unitId:d,subUnitId:l,ruleId:u,options:c}=e,p=o.getRuleById(d,l,u);if(!p)return!1;const _={unitId:d,subUnitId:l,ruleId:u,payload:{type:g.OPTIONS,payload:c}},D=[{id:E.id,params:_}],O={unitId:d,subUnitId:l,ruleId:u,payload:{type:g.OPTIONS,payload:R(p)}},N=[{id:E.id,params:O}];return i.pushUndoRedo({unitID:d,redoMutations:D,undoMutations:N}),t.executeCommand(E.id,_),!0}},P={type:n.CommandType.COMMAND,id:"data-validation.command.updateDataValidationOptions",handler(r,e){if(r.get(n.ILogService).warn("[Deprecated] UpdateDataValidationSettingCommand is deprecated, please use UpdateSheetDataValidationSettingCommand in @univerjs/sheets-data-validation instead!"),!e)return!1;const t=r.get(n.ICommandService),i=r.get(n.IUndoRedoService),o=r.get(s.DataValidationModel),d=r.get(I),{unitId:l,subUnitId:u,ruleId:c,setting:p}=e,_=d.getValidatorItem(p.type);if(!_)return!1;const D=o.getRuleById(l,u,c);if(!D||!_.validatorFormula({...D,...p},l,u).success)return!1;const O={unitId:l,subUnitId:u,ruleId:c,payload:{type:g.SETTING,payload:p}},N=[{id:E.id,params:O}],pa={unitId:l,subUnitId:u,ruleId:c,payload:{type:g.SETTING,payload:M(D)}},ma=[{id:E.id,params:pa}];return i.pushUndoRedo({unitID:l,redoMutations:N,undoMutations:ma}),t.executeCommand(E.id,O),!0}},B={type:n.CommandType.COMMAND,id:"data-validation.command.removeAll",handler(r,e){if(!e)return!1;const{unitId:a,subUnitId:t}=e,i=r.get(n.ICommandService),o=r.get(s.DataValidationModel),d=r.get(n.IUndoRedoService),l=[...o.getRules(a,t)],u={unitId:a,subUnitId:t,ruleId:l.map(_=>_.uid)},c=[{id:v.id,params:u}],p=[{id:V.id,params:{unitId:a,subUnitId:t,rule:l}}];return d.pushUndoRedo({redoMutations:c,undoMutations:p,unitID:a}),i.executeCommand(v.id,u),!0}};var K=Object.defineProperty,X=Object.getOwnPropertyDescriptor,Y=(r,e,a,t)=>{for(var i=t>1?void 0:t?X(e,a):e,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(e,a,i):d(i))||i);return t&&i&&K(e,a,i),i},A=(r,e)=>(a,t)=>e(a,t,r);const Z="SHEET_DATA_VALIDATION_PLUGIN";s.DataValidationResourceController=class extends n.Disposable{constructor(e,a,t){super(),this._resourceManagerService=e,this._univerInstanceService=a,this._dataValidationModel=t,this._initSnapshot()}_initSnapshot(){const e=t=>{const i=this._dataValidationModel.getUnitRules(t),o={};return i?(i.forEach(([d,l])=>{o[d]=l}),JSON.stringify(o)):""},a=t=>{if(!t)return{};try{return JSON.parse(t)}catch{return{}}};this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:Z,businesses:[n.UniverInstanceType.UNIVER_SHEET],toJson:t=>e(t),parseJson:t=>a(t),onUnLoad:t=>{this._dataValidationModel.deleteUnitRules(t)},onLoad:(t,i)=>{Object.keys(i).forEach(o=>{i[o].forEach(l=>{this._dataValidationModel.addRule(t,o,l)})})}}))}},s.DataValidationResourceController=Y([n.OnLifecycle(n.LifecycleStages.Ready,s.DataValidationResourceController),A(0,n.IResourceManagerService),A(1,n.IUniverInstanceService),A(2,m.Inject(s.DataValidationModel))],s.DataValidationResourceController);var x=Object.defineProperty,k=Object.getOwnPropertyDescriptor,aa=(r,e,a,t)=>{for(var i=t>1?void 0:t?k(e,a):e,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(e,a,i):d(i))||i);return t&&i&&x(e,a,i),i},y=(r,e)=>(a,t)=>e(a,t,r);s.DataValidationSheetController=class extends n.Disposable{constructor(e,a,t){super(),this._sheetInterceptorService=e,this._univerInstanceService=a,this._dataValidationModel=t,this._initSheetChange()}_initSheetChange(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:e=>{var a;if(e.id===T.RemoveSheetCommand.id){const t=e.params,i=t.unitId||this._univerInstanceService.getCurrentUnitForType(n.UniverInstanceType.UNIVER_SHEET).getUnitId(),o=this._univerInstanceService.getUniverSheetInstance(i);if(!o)return{redos:[],undos:[]};const d=t.subUnitId||((a=o.getActiveSheet())==null?void 0:a.getSheetId());if(!d)return{redos:[],undos:[]};const l=this._dataValidationModel.ensureManager(i,d);if(!l)return{redos:[],undos:[]};const u=l.getDataValidations(),c=u.map(D=>D.uid),p={unitId:i,subUnitId:d,ruleId:c},_={unitId:i,subUnitId:d,rule:u};return{redos:[{id:v.id,params:p}],undos:[{id:V.id,params:_}]}}return{redos:[],undos:[]}}}))}},s.DataValidationSheetController=aa([n.OnLifecycle(n.LifecycleStages.Ready,s.DataValidationSheetController),y(0,m.Inject(T.SheetInterceptorService)),y(1,m.Inject(n.IUniverInstanceService)),y(2,m.Inject(s.DataValidationModel))],s.DataValidationSheetController);var ta=Object.defineProperty,ea=Object.getOwnPropertyDescriptor,ia=(r,e,a,t)=>{for(var i=t>1?void 0:t?ea(e,a):e,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(e,a,i):d(i))||i);return t&&i&&ta(e,a,i),i},$=(r,e)=>(a,t)=>e(a,t,r);const na="UNIVER_DATA_VALIDATION_PLUGIN";s.UniverDataValidationPlugin=(f=class extends n.Plugin{constructor(e,a,t){super(),this._injector=a,this._commandService=t}onStarting(e){[[s.DataValidationModel],[I],[s.DataValidationResourceController],[s.DataValidationSheetController]].forEach(a=>{e.add(a)}),[L,B,b,P,w,V,E,v].forEach(a=>{this._commandService.registerCommand(a)})}},h(f,"pluginName",na),h(f,"type",n.UniverInstanceType.UNIVER_SHEET),f),s.UniverDataValidationPlugin=ia([$(1,m.Inject(m.Injector)),$(2,n.ICommandService)],s.UniverDataValidationPlugin),n.DataValidationOperator.BETWEEN+"",n.DataValidationOperator.EQUAL+"",n.DataValidationOperator.GREATER_THAN+"",n.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",n.DataValidationOperator.LESS_THAN+"",n.DataValidationOperator.LESS_THAN_OR_EQUAL+"",n.DataValidationOperator.NOT_BETWEEN+"",n.DataValidationOperator.NOT_EQUAL+"";const ra={[n.DataValidationOperator.BETWEEN]:"dataValidation.ruleName.between",[n.DataValidationOperator.EQUAL]:"dataValidation.ruleName.equal",[n.DataValidationOperator.GREATER_THAN]:"dataValidation.ruleName.greaterThan",[n.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.ruleName.greaterThanOrEqual",[n.DataValidationOperator.LESS_THAN]:"dataValidation.ruleName.lessThan",[n.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.ruleName.lessThanOrEqual",[n.DataValidationOperator.NOT_BETWEEN]:"dataValidation.ruleName.notBetween",[n.DataValidationOperator.NOT_EQUAL]:"dataValidation.ruleName.notEqual"},oa={[n.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[n.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[n.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[n.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[n.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[n.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[n.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[n.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual"},da={[n.DataValidationOperator.BETWEEN]:"dataValidation.textLength.errorMsg.between",[n.DataValidationOperator.EQUAL]:"dataValidation.textLength.errorMsg.equal",[n.DataValidationOperator.GREATER_THAN]:"dataValidation.textLength.errorMsg.greaterThan",[n.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.greaterThanOrEqual",[n.DataValidationOperator.LESS_THAN]:"dataValidation.textLength.errorMsg.lessThan",[n.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.lessThanOrEqual",[n.DataValidationOperator.NOT_BETWEEN]:"dataValidation.textLength.errorMsg.notBetween",[n.DataValidationOperator.NOT_EQUAL]:"dataValidation.textLength.errorMsg.notEqual"};var sa=Object.defineProperty,la=Object.getOwnPropertyDescriptor,ua=(r,e,a,t)=>{for(var i=t>1?void 0:t?la(e,a):e,o=r.length-1,d;o>=0;o--)(d=r[o])&&(i=(t?d(e,a,i):d(i))||i);return t&&i&&sa(e,a,i),i},j=(r,e)=>(a,t)=>e(a,t,r);const q="{FORMULA1}",H="{FORMULA2}",ca={[n.DataValidationOperator.BETWEEN]:"dataValidation.operators.between",[n.DataValidationOperator.EQUAL]:"dataValidation.operators.equal",[n.DataValidationOperator.GREATER_THAN]:"dataValidation.operators.greaterThan",[n.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.operators.greaterThanOrEqual",[n.DataValidationOperator.LESS_THAN]:"dataValidation.operators.lessThan",[n.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.operators.lessThanOrEqual",[n.DataValidationOperator.NOT_BETWEEN]:"dataValidation.operators.notBetween",[n.DataValidationOperator.NOT_EQUAL]:"dataValidation.operators.notEqual"};s.BaseDataValidator=class{constructor(e,a){h(this,"canvasRender",null);h(this,"dropdown");h(this,"optionsInput");this.localeService=e,this.injector=a}get operatorNames(){return this.operators.map(e=>this.localeService.t(ca[e]))}get titleStr(){return this.localeService.t(this.title)}skipDefaultFontRender(e,a,t){return!1}generateRuleName(e){var t,i;if(!e.operator)return this.titleStr;const a=this.localeService.t(ra[e.operator]).replace(q,(t=e.formula1)!=null?t:"").replace(H,(i=e.formula2)!=null?i:"");return`${this.titleStr} ${a}`}generateRuleErrorMessage(e){var t,i;return e.operator?`${this.localeService.t(oa[e.operator]).replace(q,(t=e.formula1)!=null?t:"").replace(H,(i=e.formula2)!=null?i:"")}`:this.titleStr}getRuleFinalError(e){return e.showInputMessage&&e.error?e.error:this.generateRuleErrorMessage(e)}isEmptyCellValue(e){return e===""||e===void 0||e===null}async isValidType(e,a,t){return!0}transform(e,a,t){return e}async validatorIsEqual(e,a,t){return!0}async validatorIsNotEqual(e,a,t){return!0}async validatorIsBetween(e,a,t){return!0}async validatorIsNotBetween(e,a,t){return!0}async validatorIsGreaterThan(e,a,t){return!0}async validatorIsGreaterThanOrEqual(e,a,t){return!0}async validatorIsLessThan(e,a,t){return!0}async validatorIsLessThanOrEqual(e,a,t){return!0}async validator(e,a){const{value:t,unitId:i,subUnitId:o}=e,d=this.isEmptyCellValue(t),{allowBlank:l=!0,operator:u}=a;if(d)return l;const c=await this.parseFormula(a,i,o);if(!await this.isValidType(e,c,a))return!1;if(!n.Tools.isDefine(u))return!0;const p=this.transform(e,c,a);switch(u){case n.DataValidationOperator.BETWEEN:return this.validatorIsBetween(p,c,a);case n.DataValidationOperator.EQUAL:return this.validatorIsEqual(p,c,a);case n.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(p,c,a);case n.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(p,c,a);case n.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(p,c,a);case n.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(p,c,a);case n.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(p,c,a);case n.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(p,c,a);default:throw new Error("Unknown operator.")}}},s.BaseDataValidator=ua([j(0,m.Inject(n.LocaleService)),j(1,m.Inject(m.Injector))],s.BaseDataValidator);const ha=[n.DataValidationOperator.BETWEEN,n.DataValidationOperator.NOT_BETWEEN];s.AddDataValidationCommand=L,s.AddDataValidationMutation=V,s.DataValidationManager=U,s.DataValidatorRegistryScope=C,s.DataValidatorRegistryService=I,s.RemoveAllDataValidationCommand=B,s.RemoveDataValidationCommand=w,s.RemoveDataValidationMutation=v,s.TWO_FORMULA_OPERATOR_COUNT=ha,s.TextLengthErrorTitleMap=da,s.UpdateDataValidationMutation=E,s.UpdateDataValidationOptionsCommand=b,s.UpdateDataValidationSettingCommand=P,s.UpdateRuleType=g,s.createDefaultNewRule=G,s.getRuleOptions=R,s.getRuleSetting=M,s.removeDataValidationUndoFactory=z,Object.defineProperty(s,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(global,factory){typeof exports=="object"&&typeof module<"u"?factory(exports,require("@univerjs/core"),require("rxjs"),require("@univerjs/sheets")):typeof define=="function"&&define.amd?define(["exports","@univerjs/core","rxjs","@univerjs/sheets"],factory):(global=typeof globalThis<"u"?globalThis:global||self,factory(global.UniverDataValidation={},global.UniverCore,global.rxjs,global.UniverSheets))})(this,function(exports2,core,rxjs,sheets){"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,_d,_e;var DataValidatorRegistryScope=(DataValidatorRegistryScope2=>(DataValidatorRegistryScope2.SHEET="sheet",DataValidatorRegistryScope2))(DataValidatorRegistryScope||{});const _DataValidatorRegistryService=class _DataValidatorRegistryService{constructor(){__publicField(this,"_validatorByScopes",new Map);__publicField(this,"_validatorMap",new Map);__publicField(this,"_validatorsChange$",new rxjs.BehaviorSubject(void 0));__publicField(this,"validatorsChange$",this._validatorsChange$.asObservable())}_addValidatorToScope(validator,scope){this._validatorByScopes.has(scope)||this._validatorByScopes.set(scope,[]);const validators=this._validatorByScopes.get(scope);if(validators.findIndex(m=>m.id===validator.id)>-1)throw new Error(`Validator item with the same id ${validator.id} has already been added!`);validators.push(validator)}_removeValidatorFromScope(validator,scope){const validators=this._validatorByScopes.get(scope);if(!validators)return;const index=validators.findIndex(v=>v.id===validator.id);index>-1&&validators.splice(index,1)}register(validator){return this._validatorMap.set(validator.id,validator),Array.isArray(validator.scopes)?validator.scopes.forEach(scope=>{this._addValidatorToScope(validator,scope)}):this._addValidatorToScope(validator,validator.scopes),this._validatorsChange$.next(),core.toDisposable(()=>{this._validatorMap.delete(validator.id),Array.isArray(validator.scopes)?validator.scopes.forEach(scope=>{this._removeValidatorFromScope(validator,scope)}):this._removeValidatorFromScope(validator,validator.scopes),this._validatorsChange$.next()})}getValidatorItem(id){return this._validatorMap.get(id)}getValidatorsByScope(scope){return this._validatorByScopes.get(scope)}};__name(_DataValidatorRegistryService,"DataValidatorRegistryService");let DataValidatorRegistryService=_DataValidatorRegistryService;var UpdateRuleType=(UpdateRuleType2=>(UpdateRuleType2[UpdateRuleType2.SETTING=0]="SETTING",UpdateRuleType2[UpdateRuleType2.RANGE=1]="RANGE",UpdateRuleType2[UpdateRuleType2.OPTIONS=2]="OPTIONS",UpdateRuleType2))(UpdateRuleType||{});function getRuleSetting(rule){return{type:rule.type,operator:rule.operator,formula1:rule.formula1,formula2:rule.formula2,allowBlank:rule.allowBlank}}__name(getRuleSetting,"getRuleSetting");function getRuleOptions(rule){return{error:rule.error,errorStyle:rule.errorStyle,errorTitle:rule.errorTitle,imeMode:rule.imeMode,prompt:rule.prompt,promptTitle:rule.promptTitle,showDropDown:rule.showDropDown,showErrorMessage:rule.showErrorMessage,showInputMessage:rule.showInputMessage,renderMode:rule.renderMode,bizInfo:rule.bizInfo}}__name(getRuleOptions,"getRuleOptions");function createDefaultNewRule(accessor){const currentRanges=accessor.get(sheets.SheetsSelectionsService).getCurrentSelections().map(s=>s.range);return{uid:core.Tools.generateRandomId(6),type:core.DataValidationType.DECIMAL,operator:core.DataValidationOperator.EQUAL,formula1:"100",ranges:currentRanges!=null?currentRanges:[{startColumn:0,endColumn:0,startRow:0,endRow:0}]}}__name(createDefaultNewRule,"createDefaultNewRule");const _DataValidationManager=class _DataValidationManager extends core.Disposable{constructor(unitId,subUnitId){super();__publicField(this,"_dataValidations",[]);__publicField(this,"_dataValidationMap",new Map);__publicField(this,"_dataValidations$",new rxjs.BehaviorSubject(this._dataValidations));__publicField(this,"unitId");__publicField(this,"subUnitId");__publicField(this,"dataValidations$",this._dataValidations$.asObservable());this.unitId=unitId,this.subUnitId=subUnitId,this._notice(),this.disposeWithMe({dispose:__name(()=>{this._dataValidations$.complete()},"dispose")})}_notice(){this._dataValidations$.next(this._dataValidations)}getRuleById(id){return this._dataValidationMap.get(id)}getRuleIndex(id){return this._dataValidations.findIndex(rule=>rule.uid===id)}addRule(rule,index){const rules=(Array.isArray(rule)?rule:[rule]).filter(item=>!this._dataValidationMap.has(item.uid));typeof index=="number"&&index<this._dataValidations.length?this._dataValidations.splice(index,0,...rules):this._dataValidations.push(...rules),rules.forEach(item=>{this._dataValidationMap.set(item.uid,item)}),this._notice()}removeRule(ruleId){const index=this._dataValidations.findIndex(item=>item.uid===ruleId);index>-1&&(this._dataValidations.splice(index,1),this._dataValidationMap.delete(ruleId),this._notice())}updateRule(ruleId,payload){const oldRule=this._dataValidationMap.get(ruleId),index=this._dataValidations.findIndex(rule2=>ruleId===rule2.uid);if(!oldRule)throw new Error(`Data validation rule is not found, ruleId: ${ruleId}.`);const rule={...oldRule};switch(payload.type){case UpdateRuleType.RANGE:{rule.ranges=payload.payload;break}case UpdateRuleType.SETTING:{Object.assign(rule,getRuleSetting(payload.payload));break}case UpdateRuleType.OPTIONS:{Object.assign(rule,getRuleOptions(payload.payload));break}}return this._dataValidations[index]=rule,this._dataValidationMap.set(ruleId,rule),this._notice(),rule}getDataValidations(){return this._dataValidations}toJSON(){return this._dataValidations}validator(_content,_rule,_pos,_onComplete){return core.DataValidationStatus.VALID}};__name(_DataValidationManager,"DataValidationManager");let DataValidationManager=_DataValidationManager;var __defProp$4=Object.defineProperty,__getOwnPropDesc$4=Object.getOwnPropertyDescriptor,__decorateClass$4=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$4(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$4(target,key,result),result},"__decorateClass$4"),__decorateParam$4=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$4");exports2.DataValidationModel=(_a=class extends core.Disposable{constructor(_logService){super();__publicField(this,"_model",new Map);__publicField(this,"_managerCreator",__name((unitId,subUnitId)=>new DataValidationManager(unitId,subUnitId),"_managerCreator"));__publicField(this,"_ruleChange$",new rxjs.Subject);__publicField(this,"_validStatusChange$",new rxjs.Subject);__publicField(this,"ruleChange$",this._ruleChange$.asObservable());__publicField(this,"ruleChangeDebounce$",this.ruleChange$.pipe(rxjs.debounceTime(20)));__publicField(this,"validStatusChange$",this._validStatusChange$.asObservable().pipe(rxjs.debounceTime(20)));this._logService=_logService,this.disposeWithMe({dispose:__name(()=>{this._ruleChange$.complete(),this._validStatusChange$.complete()},"dispose")})}setManagerCreator(creator){this._managerCreator=creator}ensureManager(unitId,subUnitId){this._model.has(unitId)||this._model.set(unitId,new Map);const unitMap=this._model.get(unitId);if(unitMap.has(subUnitId))return unitMap.get(subUnitId);const manager=this._managerCreator(unitId,subUnitId);return unitMap.set(subUnitId,manager),this.disposeWithMe(manager),manager}_addRuleSideEffect(unitId,subUnitId,rule,source){this.ensureManager(unitId,subUnitId).getRuleById(rule.uid)||this._ruleChange$.next({rule,type:"add",unitId,subUnitId,source})}addRule(unitId,subUnitId,rule,source,index){try{const manager=this.ensureManager(unitId,subUnitId);(Array.isArray(rule)?rule:[rule]).forEach(item=>{this._addRuleSideEffect(unitId,subUnitId,item,source)}),manager.addRule(rule,index)}catch(error){this._logService.error(error)}}updateRule(unitId,subUnitId,ruleId,payload,source){try{const rule=this.ensureManager(unitId,subUnitId).updateRule(ruleId,payload);this._ruleChange$.next({rule,type:"update",unitId,subUnitId,source})}catch(error){this._logService.error(error)}}removeRule(unitId,subUnitId,ruleId,source){try{const manager=this.ensureManager(unitId,subUnitId),oldRule=manager.getRuleById(ruleId);oldRule&&(manager.removeRule(ruleId),this._ruleChange$.next({rule:oldRule,type:"remove",unitId,subUnitId,source}))}catch(error){this._logService.error(error)}}getRuleById(unitId,subUnitId,ruleId){return this.ensureManager(unitId,subUnitId).getRuleById(ruleId)}getRuleIndex(unitId,subUnitId,ruleId){return this.ensureManager(unitId,subUnitId).getRuleIndex(ruleId)}getRules(unitId,subUnitId){return this.ensureManager(unitId,subUnitId).getDataValidations()}validator(content,rule,pos){const{unitId,subUnitId}=pos;return this.ensureManager(unitId,subUnitId).validator(content,rule,pos,(status,changed)=>{changed&&this._validStatusChange$.next({unitId,subUnitId,ruleId:rule.uid,status})})}getUnitRules(unitId){const unitMap=this._model.get(unitId);if(!unitMap)return[];const res=[];return unitMap.forEach(manager=>{res.push([manager.subUnitId,manager.getDataValidations()])}),res}deleteUnitRules(unitId){this._model.delete(unitId)}getSubUnitIds(unitId){var _a2,_b2;return Array.from((_b2=(_a2=this._model.get(unitId))==null?void 0:_a2.keys())!=null?_b2:[])}},__name(_a,"DataValidationModel"),_a),exports2.DataValidationModel=__decorateClass$4([__decorateParam$4(0,core.ILogService)],exports2.DataValidationModel);const AddDataValidationMutation={type:core.CommandType.MUTATION,id:"data-validation.mutation.addRule",handler(accessor,params){if(!params)return!1;const{unitId,subUnitId,rule,index,source="command"}=params;return accessor.get(exports2.DataValidationModel).addRule(unitId,subUnitId,rule,source,index),!0}},RemoveDataValidationMutation={type:core.CommandType.MUTATION,id:"data-validation.mutation.removeRule",handler(accessor,params){if(!params)return!1;const{unitId,subUnitId,ruleId,source="command"}=params,dataValidationModel=accessor.get(exports2.DataValidationModel);return Array.isArray(ruleId)?ruleId.forEach(item=>{dataValidationModel.removeRule(unitId,subUnitId,item,source)}):dataValidationModel.removeRule(unitId,subUnitId,ruleId,source),!0}},UpdateDataValidationMutation={type:core.CommandType.MUTATION,id:"data-validation.mutation.updateRule",handler(accessor,params){if(!params)return!1;const{unitId,subUnitId,ruleId,payload,source="command"}=params;return accessor.get(exports2.DataValidationModel).updateRule(unitId,subUnitId,ruleId,payload,source),!0}},AddDataValidationCommand={type:core.CommandType.COMMAND,id:"data-validation.command.addRule",async handler(accessor,params){if(accessor.get(core.ILogService).warn("[Deprecated] AddDataValidationCommand is deprecated, please use AddSheetDataValidationCommand in @univerjs/sheets-data-validation instead!"),!params)return!1;const{rule,unitId,subUnitId}=params,commandService=accessor.get(core.ICommandService),undoRedoService=accessor.get(core.IUndoRedoService),mutationParams={...params,rule:{...params.rule,ranges:[params.rule.range]}},redoMutations=[{id:AddDataValidationMutation.id,params:mutationParams}],undoMutations=[{id:RemoveDataValidationMutation.id,params:{unitId,subUnitId,ruleId:rule.uid}}];return undoRedoService.pushUndoRedo({unitID:unitId,redoMutations,undoMutations}),await commandService.executeCommand(AddDataValidationMutation.id,mutationParams),!0}},removeDataValidationUndoFactory=__name((accessor,redoParams)=>{const dataValidationModel=accessor.get(exports2.DataValidationModel),{unitId,subUnitId,ruleId,source}=redoParams;if(Array.isArray(ruleId)){const rules=ruleId.map(id=>dataValidationModel.getRuleById(unitId,subUnitId,id)).filter(Boolean);return[{id:AddDataValidationMutation.id,params:{unitId,subUnitId,rule:rules,source}}]}return[{id:AddDataValidationMutation.id,params:{unitId,subUnitId,rule:{...dataValidationModel.getRuleById(unitId,subUnitId,ruleId)},index:dataValidationModel.getRuleIndex(unitId,subUnitId,ruleId)}}]},"removeDataValidationUndoFactory"),RemoveDataValidationCommand={type:core.CommandType.COMMAND,id:"data-validation.command.removeRule",handler(accessor,params){if(!params)return!1;const{unitId,subUnitId,ruleId}=params,commandService=accessor.get(core.ICommandService),undoRedoService=accessor.get(core.IUndoRedoService),dataValidationModel=accessor.get(exports2.DataValidationModel),redoMutations=[{id:RemoveDataValidationMutation.id,params}],undoMutations=[{id:AddDataValidationMutation.id,params:{unitId,subUnitId,rule:{...dataValidationModel.getRuleById(unitId,subUnitId,ruleId)},index:dataValidationModel.getRuleIndex(unitId,subUnitId,ruleId)}}];return undoRedoService.pushUndoRedo({undoMutations,redoMutations,unitID:params.unitId}),commandService.executeCommand(RemoveDataValidationMutation.id,params),!0}},UpdateDataValidationOptionsCommand={type:core.CommandType.COMMAND,id:"data-validation.command.updateDataValidationSetting",handler(accessor,params){if(accessor.get(core.ILogService).warn("[Deprecated] UpdateDataValidationOptionsCommand is deprecated, please use UpdateSheetDataValidationOptionsCommand in @univerjs/sheets-data-validation instead!"),!params)return!1;const commandService=accessor.get(core.ICommandService),redoUndoService=accessor.get(core.IUndoRedoService),dataValidationModel=accessor.get(exports2.DataValidationModel),{unitId,subUnitId,ruleId,options}=params,rule=dataValidationModel.getRuleById(unitId,subUnitId,ruleId);if(!rule)return!1;const mutationParams={unitId,subUnitId,ruleId,payload:{type:UpdateRuleType.OPTIONS,payload:options}},redoMutations=[{id:UpdateDataValidationMutation.id,params:mutationParams}],undoMutationParams={unitId,subUnitId,ruleId,payload:{type:UpdateRuleType.OPTIONS,payload:getRuleOptions(rule)}},undoMutations=[{id:UpdateDataValidationMutation.id,params:undoMutationParams}];return redoUndoService.pushUndoRedo({unitID:unitId,redoMutations,undoMutations}),commandService.executeCommand(UpdateDataValidationMutation.id,mutationParams),!0}},UpdateDataValidationSettingCommand={type:core.CommandType.COMMAND,id:"data-validation.command.updateDataValidationOptions",handler(accessor,params){if(accessor.get(core.ILogService).warn("[Deprecated] UpdateDataValidationSettingCommand is deprecated, please use UpdateSheetDataValidationSettingCommand in @univerjs/sheets-data-validation instead!"),!params)return!1;const commandService=accessor.get(core.ICommandService),redoUndoService=accessor.get(core.IUndoRedoService),dataValidationModel=accessor.get(exports2.DataValidationModel),dataValidatorRegistryService=accessor.get(DataValidatorRegistryService),{unitId,subUnitId,ruleId,setting}=params,validator=dataValidatorRegistryService.getValidatorItem(setting.type);if(!validator)return!1;const rule=dataValidationModel.getRuleById(unitId,subUnitId,ruleId);if(!rule||!validator.validatorFormula({...rule,...setting},unitId,subUnitId).success)return!1;const mutationParams={unitId,subUnitId,ruleId,payload:{type:UpdateRuleType.SETTING,payload:setting}},redoMutations=[{id:UpdateDataValidationMutation.id,params:mutationParams}],undoMutationParams={unitId,subUnitId,ruleId,payload:{type:UpdateRuleType.SETTING,payload:getRuleSetting(rule)}},undoMutations=[{id:UpdateDataValidationMutation.id,params:undoMutationParams}];return redoUndoService.pushUndoRedo({unitID:unitId,redoMutations,undoMutations}),commandService.executeCommand(UpdateDataValidationMutation.id,mutationParams),!0}},RemoveAllDataValidationCommand={type:core.CommandType.COMMAND,id:"data-validation.command.removeAll",handler(accessor,params){if(!params)return!1;const{unitId,subUnitId}=params,commandService=accessor.get(core.ICommandService),dataValidationModel=accessor.get(exports2.DataValidationModel),undoRedoService=accessor.get(core.IUndoRedoService),currentRules=[...dataValidationModel.getRules(unitId,subUnitId)],redoParams={unitId,subUnitId,ruleId:currentRules.map(rule=>rule.uid)},redoMutations=[{id:RemoveDataValidationMutation.id,params:redoParams}],undoMutations=[{id:AddDataValidationMutation.id,params:{unitId,subUnitId,rule:currentRules}}];return undoRedoService.pushUndoRedo({redoMutations,undoMutations,unitID:unitId}),commandService.executeCommand(RemoveDataValidationMutation.id,redoParams),!0}};var __defProp$3=Object.defineProperty,__getOwnPropDesc$3=Object.getOwnPropertyDescriptor,__decorateClass$3=__name((decorators,target,key,kind)=>{for(var result=kind>1?void 0:kind?__getOwnPropDesc$3(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$3(target,key,result),result},"__decorateClass$3"),__decorateParam$3=__name((index,decorator)=>(target,key)=>decorator(target,key,index),"__decorateParam$3");const DATA_VALIDATION_PLUGIN_NAME="SHEET_DATA_VALIDATION_PLUGIN";exports2.DataValidationResourceController=(_b=class extends core.Disposable{constructor(_resourceManagerService,_univerInstanceService,_dataValidationModel){super(),this._resourceManagerService=_resourceManagerService,this._univerInstanceService=_univerInstanceService,this._dataValidationModel=_dataValidationModel,this._initSnapshot()}_initSnapshot(){const toJson=__name(unitID=>{const map=this._dataValidationModel.getUnitRules(unitID),resultMap={};return map?(map.forEach(([key,v])=>{resultMap[key]=v}),JSON.stringify(resultMap)):""},"toJson"),parseJson=__name(json=>{if(!json)return{};try{return JSON.parse(json)}catch{return{}}},"parseJson");this.disposeWithMe(this._resourceManagerService.registerPluginResource({pluginName:DATA_VALIDATION_PLUGIN_NAME,businesses:[core.UniverInstanceType.UNIVER_SHEET],toJson:__name(unitID=>toJson(unitID),"toJson"),parseJson:__name(json=>parseJson(json),"parseJson"),onUnLoad:__name(unitID=>{this._dataValidationModel.deleteUnitRules(unitID)},"onUnLoad"),onLoad:__name((unitID,value)=>{Object.keys(value).forEach(subunitId=>{value[subunitId].forEach(rule=>{this._dataValidationModel.addRule(unitID,subunitId,rule,"patched")})})},"onLoad")}))}},__name(_b,"DataValidationResourceController"),_b),exports2.DataValidationResourceController=__decorateClass$3([core.OnLifecycle(core.LifecycleStages.Ready,exports2.DataValidationResourceController),__decorateParam$3(0,core.IResourceManagerService),__decorateParam$3(1,core.IUniverInstanceService),__decorateParam$3(2,core.Inject(exports2.DataValidationModel))],exports2.DataValidationResourceController);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.DataValidationSheetController=(_c=class extends core.Disposable{constructor(_sheetInterceptorService,_univerInstanceService,_dataValidationModel){super(),this._sheetInterceptorService=_sheetInterceptorService,this._univerInstanceService=_univerInstanceService,this._dataValidationModel=_dataValidationModel,this._initSheetChange()}_initSheetChange(){this.disposeWithMe(this._sheetInterceptorService.interceptCommand({getMutations:__name(commandInfo=>{var _a2;if(commandInfo.id===sheets.RemoveSheetCommand.id){const params=commandInfo.params,unitId=params.unitId||this._univerInstanceService.getCurrentUnitForType(core.UniverInstanceType.UNIVER_SHEET).getUnitId(),workbook=this._univerInstanceService.getUniverSheetInstance(unitId);if(!workbook)return{redos:[],undos:[]};const subUnitId=params.subUnitId||((_a2=workbook.getActiveSheet())==null?void 0:_a2.getSheetId());if(!subUnitId)return{redos:[],undos:[]};const manager=this._dataValidationModel.ensureManager(unitId,subUnitId);if(!manager)return{redos:[],undos:[]};const rules=manager.getDataValidations(),ids=rules.map(i=>i.uid),redoParams={unitId,subUnitId,ruleId:ids,source:"patched"},undoParams={unitId,subUnitId,rule:rules,source:"patched"};return{redos:[{id:RemoveDataValidationMutation.id,params:redoParams}],undos:[{id:AddDataValidationMutation.id,params:undoParams}]}}return{redos:[],undos:[]}},"getMutations")}))}},__name(_c,"DataValidationSheetController"),_c),exports2.DataValidationSheetController=__decorateClass$2([core.OnLifecycle(core.LifecycleStages.Ready,exports2.DataValidationSheetController),__decorateParam$2(0,core.Inject(sheets.SheetInterceptorService)),__decorateParam$2(1,core.Inject(core.IUniverInstanceService)),__decorateParam$2(2,core.Inject(exports2.DataValidationModel))],exports2.DataValidationSheetController);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");const PLUGIN_NAME="UNIVER_DATA_VALIDATION_PLUGIN";exports2.UniverDataValidationPlugin=(_d=class extends core.Plugin{constructor(_config,_injector,_commandService){super(),this._injector=_injector,this._commandService=_commandService}onStarting(){[[exports2.DataValidationModel],[DataValidatorRegistryService],[exports2.DataValidationResourceController],[exports2.DataValidationSheetController]].forEach(d=>this._injector.add(d)),[AddDataValidationCommand,RemoveAllDataValidationCommand,UpdateDataValidationOptionsCommand,UpdateDataValidationSettingCommand,RemoveDataValidationCommand,AddDataValidationMutation,UpdateDataValidationMutation,RemoveDataValidationMutation].forEach(command=>{this._commandService.registerCommand(command)})}},__name(_d,"UniverDataValidationPlugin"),__publicField(_d,"pluginName",PLUGIN_NAME),__publicField(_d,"type",core.UniverInstanceType.UNIVER_SHEET),_d),exports2.UniverDataValidationPlugin=__decorateClass$1([__decorateParam$1(1,core.Inject(core.Injector)),__decorateParam$1(2,core.ICommandService)],exports2.UniverDataValidationPlugin),core.DataValidationOperator.BETWEEN+"",core.DataValidationOperator.EQUAL+"",core.DataValidationOperator.GREATER_THAN+"",core.DataValidationOperator.GREATER_THAN_OR_EQUAL+"",core.DataValidationOperator.LESS_THAN+"",core.DataValidationOperator.LESS_THAN_OR_EQUAL+"",core.DataValidationOperator.NOT_BETWEEN+"",core.DataValidationOperator.NOT_EQUAL+"";const OperatorTitleMap={[core.DataValidationOperator.BETWEEN]:"dataValidation.ruleName.between",[core.DataValidationOperator.EQUAL]:"dataValidation.ruleName.equal",[core.DataValidationOperator.GREATER_THAN]:"dataValidation.ruleName.greaterThan",[core.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.ruleName.greaterThanOrEqual",[core.DataValidationOperator.LESS_THAN]:"dataValidation.ruleName.lessThan",[core.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.ruleName.lessThanOrEqual",[core.DataValidationOperator.NOT_BETWEEN]:"dataValidation.ruleName.notBetween",[core.DataValidationOperator.NOT_EQUAL]:"dataValidation.ruleName.notEqual"},OperatorErrorTitleMap={[core.DataValidationOperator.BETWEEN]:"dataValidation.errorMsg.between",[core.DataValidationOperator.EQUAL]:"dataValidation.errorMsg.equal",[core.DataValidationOperator.GREATER_THAN]:"dataValidation.errorMsg.greaterThan",[core.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.errorMsg.greaterThanOrEqual",[core.DataValidationOperator.LESS_THAN]:"dataValidation.errorMsg.lessThan",[core.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.errorMsg.lessThanOrEqual",[core.DataValidationOperator.NOT_BETWEEN]:"dataValidation.errorMsg.notBetween",[core.DataValidationOperator.NOT_EQUAL]:"dataValidation.errorMsg.notEqual"},TextLengthErrorTitleMap={[core.DataValidationOperator.BETWEEN]:"dataValidation.textLength.errorMsg.between",[core.DataValidationOperator.EQUAL]:"dataValidation.textLength.errorMsg.equal",[core.DataValidationOperator.GREATER_THAN]:"dataValidation.textLength.errorMsg.greaterThan",[core.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.greaterThanOrEqual",[core.DataValidationOperator.LESS_THAN]:"dataValidation.textLength.errorMsg.lessThan",[core.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.textLength.errorMsg.lessThanOrEqual",[core.DataValidationOperator.NOT_BETWEEN]:"dataValidation.textLength.errorMsg.notBetween",[core.DataValidationOperator.NOT_EQUAL]:"dataValidation.textLength.errorMsg.notEqual"};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 FORMULA1="{FORMULA1}",FORMULA2="{FORMULA2}",operatorNameMap={[core.DataValidationOperator.BETWEEN]:"dataValidation.operators.between",[core.DataValidationOperator.EQUAL]:"dataValidation.operators.equal",[core.DataValidationOperator.GREATER_THAN]:"dataValidation.operators.greaterThan",[core.DataValidationOperator.GREATER_THAN_OR_EQUAL]:"dataValidation.operators.greaterThanOrEqual",[core.DataValidationOperator.LESS_THAN]:"dataValidation.operators.lessThan",[core.DataValidationOperator.LESS_THAN_OR_EQUAL]:"dataValidation.operators.lessThanOrEqual",[core.DataValidationOperator.NOT_BETWEEN]:"dataValidation.operators.notBetween",[core.DataValidationOperator.NOT_EQUAL]:"dataValidation.operators.notEqual"};exports2.BaseDataValidator=(_e=class{constructor(localeService,injector){__publicField(this,"canvasRender",null);__publicField(this,"dropdown");__publicField(this,"optionsInput");this.localeService=localeService,this.injector=injector}get operatorNames(){return this.operators.map(operator=>this.localeService.t(operatorNameMap[operator]))}get titleStr(){return this.localeService.t(this.title)}skipDefaultFontRender(rule,cellValue,pos){return!1}generateRuleName(rule){var _a2,_b2;if(!rule.operator)return this.titleStr;const ruleName=this.localeService.t(OperatorTitleMap[rule.operator]).replace(FORMULA1,(_a2=rule.formula1)!=null?_a2:"").replace(FORMULA2,(_b2=rule.formula2)!=null?_b2:"");return`${this.titleStr} ${ruleName}`}generateRuleErrorMessage(rule){var _a2,_b2;return rule.operator?`${this.localeService.t(OperatorErrorTitleMap[rule.operator]).replace(FORMULA1,(_a2=rule.formula1)!=null?_a2:"").replace(FORMULA2,(_b2=rule.formula2)!=null?_b2:"")}`:this.titleStr}getRuleFinalError(rule){return rule.showInputMessage&&rule.error?rule.error:this.generateRuleErrorMessage(rule)}isEmptyCellValue(cellValue){return cellValue===""||cellValue===void 0||cellValue===null}async isValidType(cellInfo,formula,rule){return!0}transform(cellInfo,formula,rule){return cellInfo}async validatorIsEqual(cellInfo,formula,rule){return!0}async validatorIsNotEqual(cellInfo,formula,rule){return!0}async validatorIsBetween(cellInfo,formula,rule){return!0}async validatorIsNotBetween(cellInfo,formula,rule){return!0}async validatorIsGreaterThan(cellInfo,formula,rule){return!0}async validatorIsGreaterThanOrEqual(cellInfo,formula,rule){return!0}async validatorIsLessThan(cellInfo,formula,rule){return!0}async validatorIsLessThanOrEqual(cellInfo,formula,rule){return!0}async validator(cellInfo,rule){const{value:cellValue,unitId,subUnitId}=cellInfo,isEmpty=this.isEmptyCellValue(cellValue),{allowBlank=!0,operator}=rule;if(isEmpty)return allowBlank;const formulaInfo=await this.parseFormula(rule,unitId,subUnitId);if(!await this.isValidType(cellInfo,formulaInfo,rule))return!1;if(!core.Tools.isDefine(operator))return!0;const transformedCell=this.transform(cellInfo,formulaInfo,rule);switch(operator){case core.DataValidationOperator.BETWEEN:return this.validatorIsBetween(transformedCell,formulaInfo,rule);case core.DataValidationOperator.EQUAL:return this.validatorIsEqual(transformedCell,formulaInfo,rule);case core.DataValidationOperator.GREATER_THAN:return this.validatorIsGreaterThan(transformedCell,formulaInfo,rule);case core.DataValidationOperator.GREATER_THAN_OR_EQUAL:return this.validatorIsGreaterThanOrEqual(transformedCell,formulaInfo,rule);case core.DataValidationOperator.LESS_THAN:return this.validatorIsLessThan(transformedCell,formulaInfo,rule);case core.DataValidationOperator.LESS_THAN_OR_EQUAL:return this.validatorIsLessThanOrEqual(transformedCell,formulaInfo,rule);case core.DataValidationOperator.NOT_BETWEEN:return this.validatorIsNotBetween(transformedCell,formulaInfo,rule);case core.DataValidationOperator.NOT_EQUAL:return this.validatorIsNotEqual(transformedCell,formulaInfo,rule);default:throw new Error("Unknown operator.")}}},__name(_e,"BaseDataValidator"),_e),exports2.BaseDataValidator=__decorateClass([__decorateParam(0,core.Inject(core.LocaleService)),__decorateParam(1,core.Inject(core.Injector))],exports2.BaseDataValidator);const TWO_FORMULA_OPERATOR_COUNT=[core.DataValidationOperator.BETWEEN,core.DataValidationOperator.NOT_BETWEEN];exports2.AddDataValidationCommand=AddDataValidationCommand,exports2.AddDataValidationMutation=AddDataValidationMutation,exports2.DataValidationManager=DataValidationManager,exports2.DataValidatorRegistryScope=DataValidatorRegistryScope,exports2.DataValidatorRegistryService=DataValidatorRegistryService,exports2.RemoveAllDataValidationCommand=RemoveAllDataValidationCommand,exports2.RemoveDataValidationCommand=RemoveDataValidationCommand,exports2.RemoveDataValidationMutation=RemoveDataValidationMutation,exports2.TWO_FORMULA_OPERATOR_COUNT=TWO_FORMULA_OPERATOR_COUNT,exports2.TextLengthErrorTitleMap=TextLengthErrorTitleMap,exports2.UpdateDataValidationMutation=UpdateDataValidationMutation,exports2.UpdateDataValidationOptionsCommand=UpdateDataValidationOptionsCommand,exports2.UpdateDataValidationSettingCommand=UpdateDataValidationSettingCommand,exports2.UpdateRuleType=UpdateRuleType,exports2.createDefaultNewRule=createDefaultNewRule,exports2.getRuleOptions=getRuleOptions,exports2.getRuleSetting=getRuleSetting,exports2.removeDataValidationUndoFactory=removeDataValidationUndoFactory,Object.defineProperty(exports2,Symbol.toStringTag,{value:"Module"})});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@univerjs/data-validation",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.6",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Data validation library for Univer",
|
|
6
6
|
"author": "DreamNum <developer@univer.ai>",
|
|
@@ -49,23 +49,21 @@
|
|
|
49
49
|
"lib"
|
|
50
50
|
],
|
|
51
51
|
"peerDependencies": {
|
|
52
|
-
"@wendellhu/redi": "0.16.0",
|
|
53
52
|
"rxjs": ">=7.0.0",
|
|
54
|
-
"@univerjs/sheets": "0.2.
|
|
55
|
-
"@univerjs/core": "0.2.
|
|
53
|
+
"@univerjs/sheets": "0.2.6",
|
|
54
|
+
"@univerjs/core": "0.2.6"
|
|
56
55
|
},
|
|
57
56
|
"dependencies": {
|
|
58
57
|
"@univerjs/protocol": "0.1.38-alpha.23"
|
|
59
58
|
},
|
|
60
59
|
"devDependencies": {
|
|
61
|
-
"@wendellhu/redi": "0.16.0",
|
|
62
60
|
"rxjs": "^7.8.1",
|
|
63
|
-
"typescript": "^5.5.
|
|
64
|
-
"vite": "^5.3.
|
|
65
|
-
"vitest": "^2.0.
|
|
66
|
-
"@univerjs/core": "0.2.
|
|
67
|
-
"@univerjs/sheets": "0.2.
|
|
68
|
-
"@univerjs/shared": "0.2.
|
|
61
|
+
"typescript": "^5.5.4",
|
|
62
|
+
"vite": "^5.3.5",
|
|
63
|
+
"vitest": "^2.0.4",
|
|
64
|
+
"@univerjs/core": "0.2.6",
|
|
65
|
+
"@univerjs/sheets": "0.2.6",
|
|
66
|
+
"@univerjs/shared": "0.2.6"
|
|
69
67
|
},
|
|
70
68
|
"univerSpace": {
|
|
71
69
|
".": {
|