@gct-paas/render 0.1.4-dev.10

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.
Files changed (59) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/LICENSE +21 -0
  3. package/README.md +1 -0
  4. package/dist/index.esm.min.mjs +7825 -0
  5. package/dist/index.min.cjs +17 -0
  6. package/dist/index.system.min.js +17 -0
  7. package/es/Event/Dependency/controller.d.ts +13 -0
  8. package/es/Event/Dependency/controller.mjs +97 -0
  9. package/es/Event/Dependency/displayRule.d.ts +19 -0
  10. package/es/Event/Dependency/displayRule.mjs +76 -0
  11. package/es/Event/Dependency/useDependency.d.ts +7 -0
  12. package/es/Event/Dependency/useDependencyToShow.d.ts +10 -0
  13. package/es/Event/Dependency/useDependencyToShow.mjs +109 -0
  14. package/es/Event/baseEvent.d.ts +155 -0
  15. package/es/Event/baseEvent.mjs +430 -0
  16. package/es/Event/bizServiceRequest.d.ts +26 -0
  17. package/es/Event/bizServiceRequest.mjs +47 -0
  18. package/es/Event/eventType.d.ts +20 -0
  19. package/es/Event/index.d.ts +4 -0
  20. package/es/Event/utils/appRedis.d.ts +29 -0
  21. package/es/Event/utils/appRedis.mjs +50 -0
  22. package/es/Event/utils/globalLoading.d.ts +13 -0
  23. package/es/Event/utils/globalLoading.mjs +103 -0
  24. package/es/Event/utils/processRovedInfo.d.ts +100 -0
  25. package/es/Event/utils/processRovedInfo.mjs +297 -0
  26. package/es/Event/utils/runGlobalByPage.d.ts +333 -0
  27. package/es/Event/utils/runGlobalByPage.mjs +306 -0
  28. package/es/Event/utils/verificationVar.d.ts +2 -0
  29. package/es/Event/utils/verificationVar.mjs +42 -0
  30. package/es/enums/index.d.ts +14 -0
  31. package/es/enums/index.mjs +6 -0
  32. package/es/hooks/useStorageRef.d.ts +9 -0
  33. package/es/hooks/useStorageRef.mjs +33 -0
  34. package/es/index.d.ts +3 -0
  35. package/es/index.mjs +23 -0
  36. package/es/register/index.d.ts +1 -0
  37. package/es/register/render-register/render-register.d.ts +54 -0
  38. package/es/register/render-register/render-register.mjs +59 -0
  39. package/es/types/index.d.ts +7 -0
  40. package/es/utils/cacheAdapter.d.ts +7 -0
  41. package/es/utils/cacheAdapter.mjs +57 -0
  42. package/es/utils/expression/index.d.ts +6 -0
  43. package/es/utils/expression/index.mjs +133 -0
  44. package/es/utils/expression/regularExpression/methods.d.ts +77 -0
  45. package/es/utils/expression/regularExpression/methods.mjs +729 -0
  46. package/es/utils/field-attrs/basicAttrs.d.ts +12 -0
  47. package/es/utils/field-attrs/basicAttrs.mjs +82 -0
  48. package/es/utils/field-attrs/index.d.ts +6 -0
  49. package/es/utils/field-attrs/index.mjs +15 -0
  50. package/es/utils/get-ref-data.d.ts +1 -0
  51. package/es/utils/get-ref-data.mjs +62 -0
  52. package/es/utils/getFieldSchema.d.ts +26 -0
  53. package/es/utils/getFieldSchema.mjs +83 -0
  54. package/es/utils/index.d.ts +6 -0
  55. package/es/utils/model-transformer.d.ts +46 -0
  56. package/es/utils/model-transformer.mjs +77 -0
  57. package/es/utils/useStyle.d.ts +21 -0
  58. package/es/utils/useStyle.mjs +17 -0
  59. package/package.json +72 -0
@@ -0,0 +1,9 @@
1
+ /**
2
+ * app全局缓存
3
+ * @param key aid_userId
4
+ * @returns
5
+ */
6
+ export declare const useGctSelect: (key: string) => {
7
+ selectID: import('vue').WritableComputedRef<string, string>;
8
+ cacheMap: import('vue').WritableComputedRef<IObject, IObject>;
9
+ };
@@ -0,0 +1,33 @@
1
+ import { useLocalStorage } from '@vueuse/core';
2
+ import { GlobalParamEnum } from '../enums/index.mjs';
3
+ import { computed } from 'vue';
4
+
5
+ const GCT_SELECT_ID = useLocalStorage("GCT_APP_GlobalCache", {});
6
+ const useGctSelect = (key) => {
7
+ const cacheMap = computed({
8
+ get() {
9
+ return GCT_SELECT_ID.value[key] || {};
10
+ },
11
+ set(value) {
12
+ GCT_SELECT_ID.value[key] = value;
13
+ }
14
+ });
15
+ const selectID = computed({
16
+ get() {
17
+ return cacheMap.value[GlobalParamEnum.SELECT_ID];
18
+ },
19
+ set(value) {
20
+ if (cacheMap.value[GlobalParamEnum.SELECT_ID]) {
21
+ cacheMap.value[GlobalParamEnum.SELECT_ID] = value;
22
+ } else {
23
+ cacheMap.value = {
24
+ ...cacheMap.value,
25
+ [GlobalParamEnum.SELECT_ID]: value
26
+ };
27
+ }
28
+ }
29
+ });
30
+ return { selectID, cacheMap };
31
+ };
32
+
33
+ export { useGctSelect };
package/es/index.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from './utils';
2
+ export * from './Event';
3
+ export declare function onInit(): void;
package/es/index.mjs ADDED
@@ -0,0 +1,23 @@
1
+ import { RenderRegister } from './register/render-register/render-register.mjs';
2
+ export { transformPropsField } from './utils/field-attrs/index.mjs';
3
+ export { useStyle } from './utils/useStyle.mjs';
4
+ export { FieldSchema, initFieldWidgetRuntime } from './utils/getFieldSchema.mjs';
5
+ export { addDataByForm, setDataByForm, transSelectData, transformData, transformDataToDict, transformSourceData } from './utils/model-transformer.mjs';
6
+ export { calculate, identify } from './utils/expression/index.mjs';
7
+ export { getRefInfoId } from './utils/get-ref-data.mjs';
8
+ export { Globals, formMap, getPageTitle, getPremission, globalVarCaches, pageDataforJson, pageGlobaVariables, setFormData } from './Event/utils/runGlobalByPage.mjs';
9
+ export { Context, Events, GctComponent } from './Event/baseEvent.mjs';
10
+ import '@gct-paas/core';
11
+ export { dependencyToShow, dependencyToShowSync, tableWidgetByDept, tableWidgetToShow, useDependencyToShow, useDependencyToShowList } from './Event/Dependency/useDependencyToShow.mjs';
12
+
13
+ function onInit() {
14
+ if (!_gct.register.render) {
15
+ _gct.register.render = new RenderRegister();
16
+ } else {
17
+ console.warn(
18
+ "渲染注册已存在,可能存在重复注册问题,请检查是否有重复引入渲染包的情况"
19
+ );
20
+ }
21
+ }
22
+
23
+ export { onInit };
@@ -0,0 +1 @@
1
+ export { RenderRegister } from './render-register/render-register';
@@ -0,0 +1,54 @@
1
+ import { Component } from 'vue';
2
+ /**
3
+ * 绘制组件注册
4
+ *
5
+ * @author zhanghanrui
6
+ * @date 2024-05-25 08:05:52
7
+ * @export
8
+ * @class RenderRegister
9
+ */
10
+ export declare class RenderRegister {
11
+ /**
12
+ * 组件清单
13
+ *
14
+ * @author zhanghanrui
15
+ * @date 2024-05-25 08:05:03
16
+ * @protected
17
+ * @type {Map<string, Component>}
18
+ */
19
+ protected map: Map<string, Component>;
20
+ /**
21
+ * 注册界面绘制组件
22
+ *
23
+ * @author zhanghanrui
24
+ * @date 2024-05-25 08:05:05
25
+ * @param {string} tag
26
+ * @param {Component} com
27
+ */
28
+ register(tag: string, com: Component): void;
29
+ /**
30
+ * 取消组件注册
31
+ *
32
+ * @author zhanghanrui
33
+ * @date 2024-05-25 08:05:34
34
+ * @param {string} tag
35
+ */
36
+ unregister(tag: string): void;
37
+ /**
38
+ * 获取注册的组件
39
+ *
40
+ * @author zhanghanrui
41
+ * @date 2024-05-25 08:05:59
42
+ * @param {string} tag
43
+ * @return {*} {(Component | undefined)}
44
+ */
45
+ get(tag: string): Component | undefined;
46
+ /**
47
+ * 组件标识清单
48
+ *
49
+ * @author zhanghanrui
50
+ * @date 2024-05-25 08:05:19
51
+ * @return {*} {string[]}
52
+ */
53
+ keys(): string[];
54
+ }
@@ -0,0 +1,59 @@
1
+ class RenderRegister {
2
+ /**
3
+ * 组件清单
4
+ *
5
+ * @author zhanghanrui
6
+ * @date 2024-05-25 08:05:03
7
+ * @protected
8
+ * @type {Map<string, Component>}
9
+ */
10
+ map = /* @__PURE__ */ new Map();
11
+ // readonly hooks = {
12
+ // register: new SyncSeriesHook<[string, Component]>(),
13
+ // unregister: new SyncSeriesHook<string>(),
14
+ // };
15
+ /**
16
+ * 注册界面绘制组件
17
+ *
18
+ * @author zhanghanrui
19
+ * @date 2024-05-25 08:05:05
20
+ * @param {string} tag
21
+ * @param {Component} com
22
+ */
23
+ register(tag, com) {
24
+ this.map.set(tag, com);
25
+ }
26
+ /**
27
+ * 取消组件注册
28
+ *
29
+ * @author zhanghanrui
30
+ * @date 2024-05-25 08:05:34
31
+ * @param {string} tag
32
+ */
33
+ unregister(tag) {
34
+ this.map.delete(tag);
35
+ }
36
+ /**
37
+ * 获取注册的组件
38
+ *
39
+ * @author zhanghanrui
40
+ * @date 2024-05-25 08:05:59
41
+ * @param {string} tag
42
+ * @return {*} {(Component | undefined)}
43
+ */
44
+ get(tag) {
45
+ return this.map.get(tag);
46
+ }
47
+ /**
48
+ * 组件标识清单
49
+ *
50
+ * @author zhanghanrui
51
+ * @date 2024-05-25 08:05:19
52
+ * @return {*} {string[]}
53
+ */
54
+ keys() {
55
+ return Array.from(this.map.keys());
56
+ }
57
+ }
58
+
59
+ export { RenderRegister };
@@ -0,0 +1,7 @@
1
+ import '@gct-paas/core/types';
2
+ import type { RenderRegister } from '../register';
3
+ declare module '@gct-paas/core' {
4
+ interface IGlobalRegister {
5
+ render: RenderRegister;
6
+ }
7
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 请求缓存
3
+ * @param args
4
+ * @param adapter
5
+ * @returns
6
+ */
7
+ export declare function cacheAdapter(args: IObject, adapter: (p: IObject) => Promise<unknown>, noneCache?: boolean): any;
@@ -0,0 +1,57 @@
1
+ import qs from 'qs';
2
+
3
+ function cacheAdapter(args, adapter, noneCache = false) {
4
+ if (noneCache || args?.customApi?.value) return adapter(args);
5
+ const maxAge = 5e3;
6
+ const requestKey = typeof args === "object" ? qs.stringify({ ...args, customApi: null }) : args;
7
+ let responsePromise = MemoryCache.get(requestKey);
8
+ if (!responsePromise) {
9
+ responsePromise = (async () => {
10
+ try {
11
+ return await adapter(args);
12
+ } catch (reason) {
13
+ MemoryCache.delete(requestKey);
14
+ throw reason;
15
+ }
16
+ })();
17
+ MemoryCache.set(requestKey, responsePromise, maxAge);
18
+ return responsePromise;
19
+ }
20
+ return responsePromise;
21
+ }
22
+ class MemoryCache {
23
+ static cachedata = {};
24
+ static set(key, value, maxAge) {
25
+ this.cachedata[key] = {
26
+ maxAge: maxAge || 0,
27
+ value,
28
+ now: Date.now()
29
+ };
30
+ }
31
+ static get(key) {
32
+ this.reset();
33
+ const cachedItem = this.cachedata[key];
34
+ if (!cachedItem) return null;
35
+ return cachedItem.value;
36
+ }
37
+ static delete(key) {
38
+ return delete this.cachedata[key];
39
+ }
40
+ static clear() {
41
+ this.cachedata = {};
42
+ }
43
+ /**
44
+ *清空过期的数据
45
+ */
46
+ static reset() {
47
+ for (const key in this.cachedata) {
48
+ const cachedItem = this.cachedata[key];
49
+ if (cachedItem) {
50
+ const isExpired = Date.now() - cachedItem.now > cachedItem.maxAge;
51
+ if (isExpired) this.delete(key);
52
+ }
53
+ }
54
+ }
55
+ }
56
+
57
+ export { cacheAdapter };
@@ -0,0 +1,6 @@
1
+ import { UseMemoizeReturn } from '@vueuse/core';
2
+ export declare const identify: UseMemoizeReturn<string[], [expr: string, isAll?: boolean | undefined]>;
3
+ export declare const calculate: UseMemoizeReturn<Promise<IObject>, [
4
+ expr: string,
5
+ values: IObject
6
+ ]>;
@@ -0,0 +1,133 @@
1
+ import * as methods from './regularExpression/methods.mjs';
2
+ import * as esprima from 'esprima-next';
3
+ import estraverse from 'estraverse';
4
+ import { innerVarIds, SYSTEM_VAR_PREFIX, operator2FuncMap, functionMap } from '@gct-paas/core';
5
+ import { useMemoize } from '@vueuse/core';
6
+
7
+ window._METHOD_DEBUG_ = methods;
8
+ const identify = useMemoize(_identify);
9
+ const calculate = useMemoize(_calc);
10
+ function _deepCalcName(node) {
11
+ if (node.type === esprima.Syntax.MemberExpression) {
12
+ return `${node.object.type === esprima.Syntax.MemberExpression ? _deepCalcName(node.object) : node.object.name}.${node.property.name}`;
13
+ } else if (node.type === esprima.Syntax.Identifier) {
14
+ return node.name;
15
+ }
16
+ return "";
17
+ }
18
+ const AsyncFunction = Object.getPrototypeOf(async function() {
19
+ return;
20
+ }).constructor;
21
+ async function _getSystemVarValue(ids) {
22
+ let res = [];
23
+ if (ids.length > 0) {
24
+ res = await _gct.api.apaas.systemVar.getGetVarByKeys({
25
+ keys: ids.join(",")
26
+ });
27
+ }
28
+ return res;
29
+ }
30
+ const getSystemVarValue = useMemoize(_getSystemVarValue);
31
+ async function _calc(expr, values) {
32
+ const ids = identify(expr, true);
33
+ const innerIds = ids.filter((id) => innerVarIds.includes(id)).sort();
34
+ const systemIds = ids.filter((id) => id.startsWith(SYSTEM_VAR_PREFIX)).sort();
35
+ const systemValues = await getSystemVarValue([...innerIds, ...systemIds]);
36
+ const ast = esprima.parse(expr);
37
+ estraverse.replace(ast, {
38
+ enter(node) {
39
+ if (node.type === esprima.Syntax.BinaryExpression) {
40
+ const { operator } = node;
41
+ const fnName = operator2FuncMap[operator];
42
+ if (!fnName) {
43
+ return node;
44
+ }
45
+ return {
46
+ type: esprima.Syntax.CallExpression,
47
+ arguments: [node.left, node.right],
48
+ callee: {
49
+ type: esprima.Syntax.Identifier,
50
+ name: fnName
51
+ },
52
+ optional: false
53
+ };
54
+ }
55
+ return node;
56
+ }
57
+ });
58
+ estraverse.traverse(ast, {
59
+ enter: function(node) {
60
+ if (node.type === esprima.Syntax.CallExpression && node.callee.type === esprima.Syntax.Identifier) {
61
+ node.callee.name = `await Methods.${node.callee.name}`;
62
+ }
63
+ }
64
+ });
65
+ const runjs = "";
66
+ const objNames = {};
67
+ const defs = [];
68
+ systemValues.forEach((item) => {
69
+ defs.push(`const ${item.key} = ${JSON.stringify(item.value)};`);
70
+ });
71
+ Object.keys(values).map((key) => {
72
+ if (key.includes(".")) {
73
+ const [obj = "", property] = key.split(".");
74
+ if (!objNames[obj]) {
75
+ defs.push(`const ${obj} = {};`);
76
+ objNames[obj] = true;
77
+ }
78
+ defs.push(`${obj}.${property} = ${JSON.stringify(values[key])};`);
79
+ } else {
80
+ defs.push(`const ${key} = ${JSON.stringify(values[key])};`);
81
+ }
82
+ });
83
+ const calcFunc = new AsyncFunction(
84
+ "Methods",
85
+ [
86
+ ...defs,
87
+ `return new Promise(async(resolve)=>{`,
88
+ `const res = ${runjs};`,
89
+ "resolve(res);",
90
+ "})"
91
+ ].join("\n")
92
+ );
93
+ const result = await calcFunc(methods);
94
+ console.info("【表达式】", expr);
95
+ console.info("【参数】", values);
96
+ console.info("【执行语句】", calcFunc.toString());
97
+ console.info("【执行结果】", result);
98
+ return result;
99
+ }
100
+ function _identify(expr, isAll = false) {
101
+ const ast = esprima.parse(expr);
102
+ let identifiers = [];
103
+ estraverse.traverse(ast, {
104
+ enter: function(node) {
105
+ if (node.type === esprima.Syntax.MemberExpression) {
106
+ const name = _deepCalcName(node);
107
+ identifiers.push(name);
108
+ Object.assign(node, {
109
+ name,
110
+ type: esprima.Syntax.Identifier
111
+ });
112
+ } else if (node.type === esprima.Syntax.Identifier) {
113
+ identifiers.push(node.name);
114
+ }
115
+ if (isAll) {
116
+ identifiers = identifiers.filter(
117
+ (item) => !functionMap[item] && item !== "undefined"
118
+ );
119
+ } else {
120
+ identifiers = identifiers.filter(
121
+ (item) => !functionMap[item] && item !== "undefined" && !innerVarIds.includes(item) && !item.startsWith(SYSTEM_VAR_PREFIX) && !item.startsWith("undefined.")
122
+ );
123
+ }
124
+ }
125
+ });
126
+ return [...new Set(identifiers)];
127
+ }
128
+ window.gct_expression = {
129
+ execute: calculate,
130
+ identify
131
+ };
132
+
133
+ export { calculate, identify };
@@ -0,0 +1,77 @@
1
+ import { default as dayjs } from 'dayjs';
2
+ declare function IF<T>(expr: boolean, v: T, l: T): T;
3
+ declare function ISEMPTY<T>(v: T): boolean;
4
+ declare function ISNULL<T>(v: T): boolean;
5
+ declare function ISUNDEFINED<T>(v: T): boolean;
6
+ declare function AND<T>(...e: T[]): boolean;
7
+ declare function OR<T>(...e: T[]): boolean;
8
+ declare function EQ<T, K>(v: T, o: K): boolean;
9
+ declare function NE<T>(v: T, o: T): boolean;
10
+ declare function LE<T>(v: T, o: T): boolean;
11
+ declare function LT<T>(v: T, o: T): boolean;
12
+ declare function GE<T>(v: T, o: T): boolean;
13
+ declare function GT<T>(v: T, o: T): boolean;
14
+ declare function LEN(v?: string): number;
15
+ declare function CONCAT(...args: string[]): string;
16
+ declare function SUBSTRING(v: string | undefined, s: number, e: number): string;
17
+ declare function SUBSTR(v: string | undefined, s: number, l: number): string;
18
+ declare function UPPER(v?: string): string;
19
+ declare function LOWER(v?: string): string;
20
+ declare function TRIM(v?: string): string;
21
+ declare function LTRIM(v?: string): string;
22
+ declare function RTRIM(v?: string): string;
23
+ declare function REPEAT(v?: string, c?: string): number | null;
24
+ declare function REPLACE(v?: string, o?: string, t?: string): string;
25
+ declare function FINDSTR(v?: string, c?: string): boolean;
26
+ declare function SEARCHSTR(v?: string, c?: string): number;
27
+ declare function PARSENUMBER(v?: string): number | null;
28
+ declare function SPLIT(v?: string, c?: string): string[];
29
+ declare function SUM(...args: (number | string)[]): number | string;
30
+ declare function ADD(...args: number[]): number | string;
31
+ declare function REDUCE(v: number, ...args: number[]): number | string;
32
+ declare function MULTIPLICATION(val: number | string, ...args: (number | string)[]): number | string;
33
+ declare function DIVISION(v: number | string, ...args: (number | string)[]): number | string;
34
+ declare function FIXED(v: number, n: number): string | undefined;
35
+ declare function ROUND(v: number | string, n: number): number | string;
36
+ declare function ROUNDUP(v: number | string, n: number): number | '';
37
+ declare function MAX(...args: (number | '')[]): number | string;
38
+ declare function LARGE(v: number[], n: number): number | undefined;
39
+ declare function MIN(...args: (number | '')[]): number | '';
40
+ declare function SMALL(v: number[], n: number): number | undefined;
41
+ declare function AVERAGE(...args: (number | '')[]): number | '';
42
+ declare function ABS(v: number): number;
43
+ declare function MOD(v: number, n: number): number | string;
44
+ declare function POWER(v: number, n: number): number;
45
+ declare function SQRT(v: number): number;
46
+ declare function GET<T extends object | IObject[]>(v: T, p: number | keyof T): T[keyof T];
47
+ declare function PUT<T extends object>(a: T, b: keyof T, c: unknown): T;
48
+ declare function PUSH<T>(v: T[], n: T): T[];
49
+ declare function HEADPUSH<T>(v: T[], n: T): T[];
50
+ declare function TIMESTAMP2DATE(v: number): string | undefined;
51
+ declare function DATE2TIMESTAMP(v: string): number | undefined;
52
+ declare function DATEFORMAT(v: Date, f: string): string | undefined;
53
+ declare function NOW(): string;
54
+ declare function TODAY(): string;
55
+ declare function YEAR(v: dayjs.ConfigType): number;
56
+ declare function MONTH(v: dayjs.ConfigType): number;
57
+ declare function DAY(v: dayjs.ConfigType): number;
58
+ declare function HOUR(v: dayjs.ConfigType): number;
59
+ declare function MINUTE(v: dayjs.ConfigType): number;
60
+ declare function WEEKRANGE(): [string, string];
61
+ declare function LASTWEEKRANGE(): [string, string];
62
+ declare function MONTHRANGE(): [string, string];
63
+ declare function LASTMONTHRANGE(): [string, string];
64
+ declare function YEARRANGE(): [string, string];
65
+ declare function LASTYEARRANGE(): [string, string];
66
+ declare function QUARTER(): [string, string];
67
+ declare function LASTQUARTER(): [string, string];
68
+ declare function ISDATERANGE(v: Date, r: [Date, Date]): boolean;
69
+ declare function ISTIMERANGE(v: string, r: [string, string]): boolean;
70
+ declare function TUPLE(...args: unknown[]): unknown[];
71
+ declare function SEQMAP<K extends string | number | symbol, V>(...args: (K | V)[]): Record<K, V>;
72
+ declare function SUMSQ(...args: (string | '')[]): number | string;
73
+ /**数组计数 */
74
+ declare function COUNT(v: number[]): number | '';
75
+ /**标准差函数 */
76
+ declare function STDEV(...args: number[]): number | '';
77
+ export { IF, ISEMPTY, ISNULL, ISUNDEFINED, AND, OR, EQ, NE, LE, LT, GE, GT, LEN, CONCAT, SUBSTRING, SUBSTR, UPPER, LOWER, TRIM, LTRIM, RTRIM, REPEAT, REPLACE, FINDSTR, SEARCHSTR, PARSENUMBER, SPLIT, SUM, ADD, REDUCE, MULTIPLICATION, DIVISION, FIXED, ROUND, ROUNDUP, MAX, LARGE, MIN, SMALL, AVERAGE, ABS, MOD, POWER, SQRT, GET, PUT, PUSH, HEADPUSH, TIMESTAMP2DATE, DATE2TIMESTAMP, DATEFORMAT, NOW, TODAY, YEAR, MONTH, DAY, HOUR, MINUTE, WEEKRANGE, LASTWEEKRANGE, MONTHRANGE, LASTMONTHRANGE, YEARRANGE, LASTYEARRANGE, QUARTER, LASTQUARTER, ISDATERANGE, ISTIMERANGE, TUPLE, SEQMAP, SUMSQ, COUNT, STDEV, };