@powerhousedao/shared 6.0.2-staging.1 → 6.0.2-staging.3
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/README.md +1 -1
- package/dist/actions-CAH-hbfc.d.ts +2444 -0
- package/dist/actions-CAH-hbfc.d.ts.map +1 -0
- package/dist/analytics/index.d.ts +42 -4
- package/dist/analytics/index.d.ts.map +1 -1
- package/dist/analytics/index.js +307 -4
- package/dist/analytics/index.js.map +1 -1
- package/dist/clis/index.d.mts +12039 -0
- package/dist/clis/index.d.mts.map +1 -0
- package/dist/clis/index.mjs +7274 -0
- package/dist/clis/index.mjs.map +1 -0
- package/dist/connect/index.d.ts +377 -1
- package/dist/connect/index.d.ts.map +1 -1
- package/dist/connect/index.js +253 -1
- package/dist/connect/index.js.map +1 -1
- package/dist/constants-xNwF0jSl.d.ts +8 -0
- package/dist/constants-xNwF0jSl.d.ts.map +1 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.js +40 -0
- package/dist/constants.js.map +1 -0
- package/dist/document-drive/index.d.ts +157 -0
- package/dist/document-drive/index.d.ts.map +1 -0
- package/dist/document-drive/index.js +963 -0
- package/dist/document-drive/index.js.map +1 -0
- package/dist/document-model/index.d.ts +5 -5
- package/dist/document-model/index.js +3386 -2
- package/dist/document-model/index.js.map +1 -1
- package/dist/document-model/mock.d.ts +2 -0
- package/dist/document-model/mock.js +9 -0
- package/dist/document-model/mock.js.map +1 -0
- package/dist/document-model/utils.d.ts +3 -0
- package/dist/document-model/utils.js +3 -0
- package/dist/index-D0E78WnU.d.ts +1 -0
- package/dist/index-DPTdhtLL.d.ts +307 -0
- package/dist/index-DPTdhtLL.d.ts.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +2 -0
- package/dist/mock-Cgn-VBF_.d.ts +7 -0
- package/dist/mock-Cgn-VBF_.d.ts.map +1 -0
- package/dist/processors/index.d.ts +2 -5
- package/dist/processors/index.js +116 -3
- package/dist/processors/index.js.map +1 -1
- package/dist/registry/index.d.ts +60 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +116 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/types-1E8sqdB9.d.ts +410 -0
- package/dist/types-1E8sqdB9.d.ts.map +1 -0
- package/dist/types-BFDlQkXZ.d.ts +158 -0
- package/dist/types-BFDlQkXZ.d.ts.map +1 -0
- package/dist/utils-CJF4w5Bp.d.ts +9 -0
- package/dist/utils-CJF4w5Bp.d.ts.map +1 -0
- package/dist/utils-bCWnsmtD.js +70 -0
- package/dist/utils-bCWnsmtD.js.map +1 -0
- package/package.json +62 -12
- package/dist/analytics/analytics-path.d.ts +0 -36
- package/dist/analytics/analytics-path.d.ts.map +0 -1
- package/dist/analytics/analytics-path.js +0 -170
- package/dist/analytics/analytics-path.js.map +0 -1
- package/dist/analytics/analytics-period.d.ts +0 -40
- package/dist/analytics/analytics-period.d.ts.map +0 -1
- package/dist/analytics/analytics-period.js +0 -204
- package/dist/analytics/analytics-period.js.map +0 -1
- package/dist/analytics/constants.d.ts +0 -35
- package/dist/analytics/constants.d.ts.map +0 -1
- package/dist/analytics/constants.js +0 -40
- package/dist/analytics/constants.js.map +0 -1
- package/dist/analytics/types.d.ts +0 -85
- package/dist/analytics/types.d.ts.map +0 -1
- package/dist/analytics/types.js +0 -2
- package/dist/analytics/types.js.map +0 -1
- package/dist/connect/env-config.d.ts +0 -862
- package/dist/connect/env-config.d.ts.map +0 -1
- package/dist/connect/env-config.js +0 -525
- package/dist/connect/env-config.js.map +0 -1
- package/dist/document-model/core/actions.d.ts +0 -62
- package/dist/document-model/core/actions.d.ts.map +0 -1
- package/dist/document-model/core/actions.js +0 -2
- package/dist/document-model/core/actions.js.map +0 -1
- package/dist/document-model/core/constants.d.ts +0 -6
- package/dist/document-model/core/constants.d.ts.map +0 -1
- package/dist/document-model/core/constants.js +0 -8
- package/dist/document-model/core/constants.js.map +0 -1
- package/dist/document-model/core/documents.d.ts +0 -102
- package/dist/document-model/core/documents.d.ts.map +0 -1
- package/dist/document-model/core/documents.js +0 -2
- package/dist/document-model/core/documents.js.map +0 -1
- package/dist/document-model/core/operations.d.ts +0 -74
- package/dist/document-model/core/operations.d.ts.map +0 -1
- package/dist/document-model/core/operations.js +0 -2
- package/dist/document-model/core/operations.js.map +0 -1
- package/dist/document-model/core/ph-types.d.ts +0 -7
- package/dist/document-model/core/ph-types.d.ts.map +0 -1
- package/dist/document-model/core/ph-types.js +0 -2
- package/dist/document-model/core/ph-types.js.map +0 -1
- package/dist/document-model/core/signatures.d.ts +0 -52
- package/dist/document-model/core/signatures.d.ts.map +0 -1
- package/dist/document-model/core/signatures.js +0 -2
- package/dist/document-model/core/signatures.js.map +0 -1
- package/dist/document-model/core/state.d.ts +0 -38
- package/dist/document-model/core/state.d.ts.map +0 -1
- package/dist/document-model/core/state.js +0 -2
- package/dist/document-model/core/state.js.map +0 -1
- package/dist/document-model/core/types.d.ts +0 -533
- package/dist/document-model/core/types.d.ts.map +0 -1
- package/dist/document-model/core/types.js +0 -2
- package/dist/document-model/core/types.js.map +0 -1
- package/dist/document-model/core/upgrades.d.ts +0 -24
- package/dist/document-model/core/upgrades.d.ts.map +0 -1
- package/dist/document-model/core/upgrades.js +0 -2
- package/dist/document-model/core/upgrades.js.map +0 -1
- package/dist/document-model/index.d.ts.map +0 -1
- package/dist/document-model/types.d.ts +0 -97
- package/dist/document-model/types.d.ts.map +0 -1
- package/dist/document-model/types.js +0 -2
- package/dist/document-model/types.js.map +0 -1
- package/dist/processors/constants.d.ts +0 -4
- package/dist/processors/constants.d.ts.map +0 -1
- package/dist/processors/constants.js +0 -4
- package/dist/processors/constants.js.map +0 -1
- package/dist/processors/drive-analytics/document-processor.d.ts +0 -10
- package/dist/processors/drive-analytics/document-processor.d.ts.map +0 -1
- package/dist/processors/drive-analytics/document-processor.js +0 -43
- package/dist/processors/drive-analytics/document-processor.js.map +0 -1
- package/dist/processors/drive-analytics/drive-processor.d.ts +0 -10
- package/dist/processors/drive-analytics/drive-processor.d.ts.map +0 -1
- package/dist/processors/drive-analytics/drive-processor.js +0 -85
- package/dist/processors/drive-analytics/drive-processor.js.map +0 -1
- package/dist/processors/drive-analytics/index.d.ts +0 -10
- package/dist/processors/drive-analytics/index.d.ts.map +0 -1
- package/dist/processors/drive-analytics/index.js +0 -28
- package/dist/processors/drive-analytics/index.js.map +0 -1
- package/dist/processors/drive-analytics/types.d.ts +0 -3
- package/dist/processors/drive-analytics/types.d.ts.map +0 -1
- package/dist/processors/drive-analytics/types.js +0 -2
- package/dist/processors/drive-analytics/types.js.map +0 -1
- package/dist/processors/index.d.ts.map +0 -1
- package/dist/processors/relational/types.d.ts +0 -72
- package/dist/processors/relational/types.d.ts.map +0 -1
- package/dist/processors/relational/types.js +0 -45
- package/dist/processors/relational/types.js.map +0 -1
- package/dist/processors/relational/utils.d.ts +0 -29
- package/dist/processors/relational/utils.d.ts.map +0 -1
- package/dist/processors/relational/utils.js +0 -67
- package/dist/processors/relational/utils.js.map +0 -1
- package/dist/processors/types.d.ts +0 -90
- package/dist/processors/types.d.ts.map +0 -1
- package/dist/processors/types.js +0 -2
- package/dist/processors/types.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { DateTime } from "luxon";
|
|
2
|
+
|
|
3
|
+
//#region analytics/constants.d.ts
|
|
4
|
+
declare enum AnalyticsSerializerTypes {
|
|
5
|
+
AnalyticsPath = 0,
|
|
6
|
+
AnalyticsPathSegment = 1,
|
|
7
|
+
AnalyticsPeriod = 2
|
|
8
|
+
}
|
|
9
|
+
declare enum AnalyticsPeriodType {
|
|
10
|
+
Year = 0,
|
|
11
|
+
Quarter = 1,
|
|
12
|
+
Month = 2
|
|
13
|
+
}
|
|
14
|
+
declare enum AnalyticsMetric {
|
|
15
|
+
Budget = 0,
|
|
16
|
+
Forecast = 1,
|
|
17
|
+
Actuals = 2,
|
|
18
|
+
PaymentsOnChain = 3,
|
|
19
|
+
PaymentsOffChainIncluded = 4,
|
|
20
|
+
FTEs = 5
|
|
21
|
+
}
|
|
22
|
+
declare enum CompoundOperator {
|
|
23
|
+
VectorAdd = 0,
|
|
24
|
+
VectorSubtract = 1,
|
|
25
|
+
ScalarMultiply = 2,
|
|
26
|
+
ScalarDivide = 3
|
|
27
|
+
}
|
|
28
|
+
declare enum AnalyticsGranularity {
|
|
29
|
+
Total = 0,
|
|
30
|
+
Annual = 1,
|
|
31
|
+
SemiAnnual = 2,
|
|
32
|
+
Quarterly = 3,
|
|
33
|
+
Monthly = 4,
|
|
34
|
+
Weekly = 5,
|
|
35
|
+
Daily = 6,
|
|
36
|
+
Hourly = 7
|
|
37
|
+
}
|
|
38
|
+
//#endregion
|
|
39
|
+
//#region analytics/analytics-path.d.ts
|
|
40
|
+
declare class AnalyticsPath {
|
|
41
|
+
get segments(): AnalyticsPathSegment[];
|
|
42
|
+
private _segments;
|
|
43
|
+
static fromString(path: string): AnalyticsPath;
|
|
44
|
+
static fromStringArray(segments: string[]): AnalyticsPath;
|
|
45
|
+
static fromArray(segments: AnalyticsPathSegment[]): AnalyticsPath;
|
|
46
|
+
static fromJSON(json: any): AnalyticsPath;
|
|
47
|
+
constructor(segments: AnalyticsPathSegment[]);
|
|
48
|
+
toJSON(): {
|
|
49
|
+
_t: AnalyticsSerializerTypes;
|
|
50
|
+
_v: string;
|
|
51
|
+
};
|
|
52
|
+
toString(tail?: string): string;
|
|
53
|
+
firstSegment(): AnalyticsPathSegment;
|
|
54
|
+
reduce(): AnalyticsPath;
|
|
55
|
+
applyLod(levelOfDetail: number): AnalyticsPath;
|
|
56
|
+
}
|
|
57
|
+
declare class AnalyticsPathSegment {
|
|
58
|
+
get filters(): NullableStrings;
|
|
59
|
+
get groups(): NullableStrings;
|
|
60
|
+
private _filters;
|
|
61
|
+
private _groups;
|
|
62
|
+
static fromString(segment: string): AnalyticsPathSegment;
|
|
63
|
+
static escape(segment: string): string;
|
|
64
|
+
static unescape(segment: string): string;
|
|
65
|
+
constructor(filters?: NullableStrings, groups?: NullableStrings);
|
|
66
|
+
toJSON(): {
|
|
67
|
+
_t: AnalyticsSerializerTypes;
|
|
68
|
+
_v: string;
|
|
69
|
+
};
|
|
70
|
+
toString(): string;
|
|
71
|
+
}
|
|
72
|
+
type NullableStrings = string[] | null;
|
|
73
|
+
//#endregion
|
|
74
|
+
//#region analytics/types.d.ts
|
|
75
|
+
type AnalyticsSeriesQuery = {
|
|
76
|
+
start: DateTime | null;
|
|
77
|
+
end: DateTime | null;
|
|
78
|
+
metrics: string[];
|
|
79
|
+
currency?: AnalyticsPath;
|
|
80
|
+
select: Record<string, AnalyticsPath[]>;
|
|
81
|
+
};
|
|
82
|
+
type AnalyticsQuery = AnalyticsSeriesQuery & {
|
|
83
|
+
granularity: AnalyticsGranularity;
|
|
84
|
+
lod: Record<string, number | null>;
|
|
85
|
+
};
|
|
86
|
+
type AnalyticsSeries<D = string | AnalyticsDimension> = {
|
|
87
|
+
source: AnalyticsPath;
|
|
88
|
+
start: DateTime;
|
|
89
|
+
end: DateTime | null;
|
|
90
|
+
metric: string;
|
|
91
|
+
value: number;
|
|
92
|
+
unit: string | null;
|
|
93
|
+
fn: string;
|
|
94
|
+
params: Record<string, unknown> | null;
|
|
95
|
+
dimensions: Record<string, D>;
|
|
96
|
+
};
|
|
97
|
+
type AnalyticsDimension = {
|
|
98
|
+
path: AnalyticsPath;
|
|
99
|
+
icon: string;
|
|
100
|
+
label: string;
|
|
101
|
+
description: string;
|
|
102
|
+
};
|
|
103
|
+
type CompoundAnalyticsQuery = {
|
|
104
|
+
start: DateTime | null;
|
|
105
|
+
end: DateTime | null;
|
|
106
|
+
granularity: AnalyticsGranularity;
|
|
107
|
+
lod: Record<string, number | null>;
|
|
108
|
+
select: Record<string, AnalyticsPath[]>;
|
|
109
|
+
expression: CompoundAnalyticsExpression;
|
|
110
|
+
};
|
|
111
|
+
type CompoundAnalyticsExpression = {
|
|
112
|
+
inputs: CompoundAnalyticsInputs;
|
|
113
|
+
operator: CompoundOperator;
|
|
114
|
+
operand: AnalyticsOperand;
|
|
115
|
+
resultCurrency?: AnalyticsPath;
|
|
116
|
+
};
|
|
117
|
+
type CompoundAnalyticsInputs = {
|
|
118
|
+
metrics: string[];
|
|
119
|
+
currency?: AnalyticsPath;
|
|
120
|
+
};
|
|
121
|
+
type AnalyticsOperand = {
|
|
122
|
+
metric: string;
|
|
123
|
+
currency?: AnalyticsPath;
|
|
124
|
+
useSum: boolean;
|
|
125
|
+
};
|
|
126
|
+
type MultiCurrencyConversion = {
|
|
127
|
+
targetCurrency?: AnalyticsPath;
|
|
128
|
+
conversions: ConversionMetric[];
|
|
129
|
+
};
|
|
130
|
+
type ConversionMetric = {
|
|
131
|
+
metric: string;
|
|
132
|
+
currency?: AnalyticsPath;
|
|
133
|
+
};
|
|
134
|
+
type AnalyticsSeriesInput = {
|
|
135
|
+
start: DateTime;
|
|
136
|
+
end?: DateTime | null;
|
|
137
|
+
source: AnalyticsPath;
|
|
138
|
+
metric: string;
|
|
139
|
+
value: number;
|
|
140
|
+
unit?: string | null;
|
|
141
|
+
fn?: string | null;
|
|
142
|
+
params?: Record<string, any> | null;
|
|
143
|
+
dimensions: Record<string, AnalyticsPath>;
|
|
144
|
+
dimensionMetadata?: Record<string, string>;
|
|
145
|
+
};
|
|
146
|
+
type AnalyticsUpdateCallback = (source: AnalyticsPath) => void;
|
|
147
|
+
interface IAnalyticsStore {
|
|
148
|
+
clearSeriesBySource: (source: AnalyticsPath, cleanUpDimensions?: boolean) => Promise<number>;
|
|
149
|
+
clearEmptyAnalyticsDimensions: () => Promise<number>;
|
|
150
|
+
getMatchingSeries: (query: AnalyticsSeriesQuery) => Promise<AnalyticsSeries[]>;
|
|
151
|
+
addSeriesValue: (input: AnalyticsSeriesInput) => Promise<void>;
|
|
152
|
+
addSeriesValues: (inputs: AnalyticsSeriesInput[]) => Promise<void>;
|
|
153
|
+
getDimensions: () => Promise<any>;
|
|
154
|
+
subscribeToSource: (source: AnalyticsPath, callback: AnalyticsUpdateCallback) => () => void;
|
|
155
|
+
}
|
|
156
|
+
//#endregion
|
|
157
|
+
export { AnalyticsMetric as _, AnalyticsSeriesInput as a, CompoundOperator as b, CompoundAnalyticsExpression as c, ConversionMetric as d, IAnalyticsStore as f, AnalyticsGranularity as g, AnalyticsPathSegment as h, AnalyticsSeries as i, CompoundAnalyticsInputs as l, AnalyticsPath as m, AnalyticsOperand as n, AnalyticsSeriesQuery as o, MultiCurrencyConversion as p, AnalyticsQuery as r, AnalyticsUpdateCallback as s, AnalyticsDimension as t, CompoundAnalyticsQuery as u, AnalyticsPeriodType as v, AnalyticsSerializerTypes as y };
|
|
158
|
+
//# sourceMappingURL=types-BFDlQkXZ.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-BFDlQkXZ.d.ts","names":[],"sources":["../analytics/constants.ts","../analytics/analytics-path.ts","../analytics/types.ts"],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
//#region document-model/utils.d.ts
|
|
2
|
+
declare function generateId(method?: "UUIDv4"): string;
|
|
3
|
+
/**
|
|
4
|
+
* Derives a deterministic operation ID from stable properties.
|
|
5
|
+
*/
|
|
6
|
+
declare function deriveOperationId(documentId: string, scope: string, branch: string, actionId: string): string;
|
|
7
|
+
//#endregion
|
|
8
|
+
export { generateId as n, deriveOperationId as t };
|
|
9
|
+
//# sourceMappingURL=utils-CJF4w5Bp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-CJF4w5Bp.d.ts","names":[],"sources":["../document-model/utils.ts"],"mappings":";iBAGgB,UAAA,CAAW,MAAA;;;;iBAaX,iBAAA,CACd,UAAA,UACA,KAAA,UACA,MAAA,UACA,QAAA"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { stringify } from "safe-stable-stringify";
|
|
2
|
+
import { createHash } from "sha1-uint8array";
|
|
3
|
+
//#region document-model/crypto.ts
|
|
4
|
+
const hashBrowser = (data, algorithm = "sha1", encoding = "base64", _params) => {
|
|
5
|
+
if (!["sha1"].includes(algorithm)) throw new Error(`Hashing algorithm not supported: "${algorithm}". Available: sha1`);
|
|
6
|
+
if (!["base64", "hex"].includes(encoding)) throw new Error(`Hash encoding not supported: "${encoding}". Available: base64, hex`);
|
|
7
|
+
const hash = hashUIntArray(data, algorithm);
|
|
8
|
+
if (encoding === "hex") return uint8ArrayToHex(hash);
|
|
9
|
+
return uint8ArrayToBase64(hash);
|
|
10
|
+
};
|
|
11
|
+
function uint8ArrayToBase64(uint8Array) {
|
|
12
|
+
let binaryString = "";
|
|
13
|
+
for (let i = 0; i < uint8Array.length; i++) binaryString += String.fromCharCode(uint8Array[i]);
|
|
14
|
+
return btoa(binaryString);
|
|
15
|
+
}
|
|
16
|
+
function uint8ArrayToHex(uint8Array) {
|
|
17
|
+
return Array.from(uint8Array).map((byte) => byte.toString(16).padStart(2, "0")).join("");
|
|
18
|
+
}
|
|
19
|
+
function hashUIntArray(data, algorithm = "sha1") {
|
|
20
|
+
if (!["sha1"].includes(algorithm)) throw new Error("Hashing algorithm not supported: Available: sha1");
|
|
21
|
+
return createHash("sha1").update(data).digest();
|
|
22
|
+
}
|
|
23
|
+
function getUnixTimestamp(date) {
|
|
24
|
+
return (new Date(date).getTime() / 1e3).toFixed(0);
|
|
25
|
+
}
|
|
26
|
+
function buildOperationSignatureParams({ documentId, signer, action, previousStateHash }) {
|
|
27
|
+
const { scope, type } = action;
|
|
28
|
+
return [
|
|
29
|
+
getUnixTimestamp(/* @__PURE__ */ new Date()),
|
|
30
|
+
signer.app.key,
|
|
31
|
+
hashBrowser([
|
|
32
|
+
documentId,
|
|
33
|
+
scope,
|
|
34
|
+
type,
|
|
35
|
+
stringify(action.input)
|
|
36
|
+
].join("")),
|
|
37
|
+
previousStateHash
|
|
38
|
+
];
|
|
39
|
+
}
|
|
40
|
+
const textEncode = new TextEncoder();
|
|
41
|
+
function buildOperationSignatureMessage(params) {
|
|
42
|
+
const message = params.join("");
|
|
43
|
+
const prefix = "Signed Operation:\n" + message.length.toString();
|
|
44
|
+
return textEncode.encode(prefix + message);
|
|
45
|
+
}
|
|
46
|
+
function ab2hex(ab) {
|
|
47
|
+
const view = ArrayBuffer.isView(ab) ? ab : new Uint8Array(ab);
|
|
48
|
+
return Array.prototype.map.call(view, (x) => ("00" + x.toString(16)).slice(-2)).join("");
|
|
49
|
+
}
|
|
50
|
+
function hex2ab(hex) {
|
|
51
|
+
return new Uint8Array(hex.match(/[\da-f]{2}/gi)?.map(function(h) {
|
|
52
|
+
return parseInt(h, 16);
|
|
53
|
+
}) ?? []);
|
|
54
|
+
}
|
|
55
|
+
//#endregion
|
|
56
|
+
//#region document-model/utils.ts
|
|
57
|
+
function generateId(method) {
|
|
58
|
+
if (method && method.toString() !== "UUIDv4") throw new Error(`Id generation method not supported: "${method.toString()}"`);
|
|
59
|
+
return globalThis.crypto.randomUUID();
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Derives a deterministic operation ID from stable properties.
|
|
63
|
+
*/
|
|
64
|
+
function deriveOperationId(documentId, scope, branch, actionId) {
|
|
65
|
+
return hashBrowser(`${documentId}:${scope}:${branch}:${actionId}`, "sha1", "hex").slice(0, 32);
|
|
66
|
+
}
|
|
67
|
+
//#endregion
|
|
68
|
+
export { buildOperationSignatureParams as a, hex2ab as c, buildOperationSignatureMessage as i, generateId as n, getUnixTimestamp as o, ab2hex as r, hashBrowser as s, deriveOperationId as t };
|
|
69
|
+
|
|
70
|
+
//# sourceMappingURL=utils-bCWnsmtD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-bCWnsmtD.js","names":["createSha1Hash","stringifyJson"],"sources":["../document-model/crypto.ts","../document-model/utils.ts"],"sourcesContent":["import { stringify as stringifyJson } from \"safe-stable-stringify\";\nimport { createHash as createSha1Hash } from \"sha1-uint8array\";\nimport type { ActionSignatureContext } from \"./types.js\";\n\nexport const hashBrowser = (\n data: string | Uint8Array | ArrayBufferView | DataView,\n algorithm = \"sha1\",\n encoding = \"base64\",\n _params?: Record<string, unknown>,\n) => {\n if (![\"sha1\"].includes(algorithm)) {\n throw new Error(\n `Hashing algorithm not supported: \"${algorithm}\". Available: sha1`,\n );\n }\n\n if (![\"base64\", \"hex\"].includes(encoding)) {\n throw new Error(\n `Hash encoding not supported: \"${encoding}\". Available: base64, hex`,\n );\n }\n\n const hash = hashUIntArray(data, algorithm);\n\n if (encoding === \"hex\") {\n return uint8ArrayToHex(hash);\n }\n\n return uint8ArrayToBase64(hash);\n};\n\nfunction uint8ArrayToBase64(uint8Array: Uint8Array) {\n // Convert the Uint8Array to a binary string\n let binaryString = \"\";\n for (let i = 0; i < uint8Array.length; i++) {\n binaryString += String.fromCharCode(uint8Array[i]);\n }\n\n // Encode the binary string to base64\n const base64String = btoa(binaryString);\n return base64String;\n}\n\nfunction uint8ArrayToHex(uint8Array: Uint8Array) {\n return Array.from(uint8Array)\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n\nfunction hashUIntArray(\n data: string | Uint8Array | ArrayBufferView,\n algorithm = \"sha1\",\n) {\n if (![\"sha1\"].includes(algorithm)) {\n throw new Error(\"Hashing algorithm not supported: Available: sha1\");\n }\n return createSha1Hash(\"sha1\")\n .update(data as string)\n .digest();\n}\n\nexport function getUnixTimestamp(date: Date | string): string {\n return (new Date(date).getTime() / 1000).toFixed(0);\n}\n\nexport function buildOperationSignatureParams({\n documentId,\n signer,\n action,\n previousStateHash,\n}: ActionSignatureContext): [string, string, string, string] {\n const { /*id, timestamp,*/ scope, type } = action;\n return [\n /*getUnixTimestamp(timestamp)*/ getUnixTimestamp(new Date()),\n signer.app.key,\n hashBrowser(\n [documentId, scope, /*id,*/ type, stringifyJson(action.input)].join(\"\"),\n ),\n previousStateHash,\n ];\n}\n\nconst textEncode = new TextEncoder();\n\nexport function buildOperationSignatureMessage(\n params: [string, string, string, string],\n): Uint8Array {\n const message = params.join(\"\");\n const prefix = \"\\x19Signed Operation:\\n\" + message.length.toString();\n return textEncode.encode(prefix + message);\n}\n\nexport function ab2hex(ab: ArrayBuffer | ArrayBufferView): string {\n const view = ArrayBuffer.isView(ab) ? ab : new Uint8Array(ab);\n return Array.prototype.map\n .call(view, (x: number) => (\"00\" + x.toString(16)).slice(-2))\n .join(\"\");\n}\n\nexport function hex2ab(hex: string) {\n return new Uint8Array(\n hex.match(/[\\da-f]{2}/gi)?.map(function (h) {\n return parseInt(h, 16);\n }) ?? [],\n );\n}\n","export { generateMock } from \"./mock.js\";\nimport { hashBrowser } from \"./crypto.js\";\n\nexport function generateId(method?: \"UUIDv4\"): string {\n if (method && method.toString() !== \"UUIDv4\") {\n throw new Error(\n `Id generation method not supported: \"${method.toString()}\"`,\n );\n }\n\n return globalThis.crypto.randomUUID();\n}\n\n/**\n * Derives a deterministic operation ID from stable properties.\n */\nexport function deriveOperationId(\n documentId: string,\n scope: string,\n branch: string,\n actionId: string,\n): string {\n const input = `${documentId}:${scope}:${branch}:${actionId}`;\n return hashBrowser(input, \"sha1\", \"hex\").slice(0, 32);\n}\n"],"mappings":";;;AAIA,MAAa,eACX,MACA,YAAY,QACZ,WAAW,UACX,YACG;AACH,KAAI,CAAC,CAAC,OAAO,CAAC,SAAS,UAAU,CAC/B,OAAM,IAAI,MACR,qCAAqC,UAAU,oBAChD;AAGH,KAAI,CAAC,CAAC,UAAU,MAAM,CAAC,SAAS,SAAS,CACvC,OAAM,IAAI,MACR,iCAAiC,SAAS,2BAC3C;CAGH,MAAM,OAAO,cAAc,MAAM,UAAU;AAE3C,KAAI,aAAa,MACf,QAAO,gBAAgB,KAAK;AAG9B,QAAO,mBAAmB,KAAK;;AAGjC,SAAS,mBAAmB,YAAwB;CAElD,IAAI,eAAe;AACnB,MAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,IACrC,iBAAgB,OAAO,aAAa,WAAW,GAAG;AAKpD,QADqB,KAAK,aAAa;;AAIzC,SAAS,gBAAgB,YAAwB;AAC/C,QAAO,MAAM,KAAK,WAAW,CAC1B,KAAK,SAAS,KAAK,SAAS,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,CACjD,KAAK,GAAG;;AAGb,SAAS,cACP,MACA,YAAY,QACZ;AACA,KAAI,CAAC,CAAC,OAAO,CAAC,SAAS,UAAU,CAC/B,OAAM,IAAI,MAAM,mDAAmD;AAErE,QAAOA,WAAe,OAAO,CAC1B,OAAO,KAAe,CACtB,QAAQ;;AAGb,SAAgB,iBAAiB,MAA6B;AAC5D,SAAQ,IAAI,KAAK,KAAK,CAAC,SAAS,GAAG,KAAM,QAAQ,EAAE;;AAGrD,SAAgB,8BAA8B,EAC5C,YACA,QACA,QACA,qBAC2D;CAC3D,MAAM,EAAqB,OAAO,SAAS;AAC3C,QAAO;EAC2B,iCAAiB,IAAI,MAAM,CAAC;EAC5D,OAAO,IAAI;EACX,YACE;GAAC;GAAY;GAAe;GAAMC,UAAc,OAAO,MAAM;GAAC,CAAC,KAAK,GAAG,CACxE;EACD;EACD;;AAGH,MAAM,aAAa,IAAI,aAAa;AAEpC,SAAgB,+BACd,QACY;CACZ,MAAM,UAAU,OAAO,KAAK,GAAG;CAC/B,MAAM,SAAS,yBAA4B,QAAQ,OAAO,UAAU;AACpE,QAAO,WAAW,OAAO,SAAS,QAAQ;;AAG5C,SAAgB,OAAO,IAA2C;CAChE,MAAM,OAAO,YAAY,OAAO,GAAG,GAAG,KAAK,IAAI,WAAW,GAAG;AAC7D,QAAO,MAAM,UAAU,IACpB,KAAK,OAAO,OAAe,OAAO,EAAE,SAAS,GAAG,EAAE,MAAM,GAAG,CAAC,CAC5D,KAAK,GAAG;;AAGb,SAAgB,OAAO,KAAa;AAClC,QAAO,IAAI,WACT,IAAI,MAAM,eAAe,EAAE,IAAI,SAAU,GAAG;AAC1C,SAAO,SAAS,GAAG,GAAG;GACtB,IAAI,EAAE,CACT;;;;ACrGH,SAAgB,WAAW,QAA2B;AACpD,KAAI,UAAU,OAAO,UAAU,KAAK,SAClC,OAAM,IAAI,MACR,wCAAwC,OAAO,UAAU,CAAC,GAC3D;AAGH,QAAO,WAAW,OAAO,YAAY;;;;;AAMvC,SAAgB,kBACd,YACA,OACA,QACA,UACQ;AAER,QAAO,YADO,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,YACxB,QAAQ,MAAM,CAAC,MAAM,GAAG,GAAG"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@powerhousedao/shared",
|
|
3
|
-
"version": "6.0.2-staging.
|
|
3
|
+
"version": "6.0.2-staging.3",
|
|
4
4
|
"type": "module",
|
|
5
|
+
"sideEffects": false,
|
|
5
6
|
"publishConfig": {
|
|
6
7
|
"access": "public"
|
|
7
8
|
},
|
|
@@ -13,50 +14,99 @@
|
|
|
13
14
|
"url": "https://github.com/powerhouse-inc/powerhouse"
|
|
14
15
|
},
|
|
15
16
|
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"source": "./index.ts",
|
|
19
|
+
"import": "./dist/index.js"
|
|
20
|
+
},
|
|
16
21
|
"./processors": {
|
|
17
|
-
"
|
|
22
|
+
"source": "./processors/index.ts",
|
|
18
23
|
"import": "./dist/processors/index.js"
|
|
19
24
|
},
|
|
20
25
|
"./processors/*": {
|
|
21
|
-
"
|
|
26
|
+
"source": "./processors/*.ts",
|
|
22
27
|
"import": "./dist/processors/*.js"
|
|
23
28
|
},
|
|
24
29
|
"./document-model": {
|
|
25
|
-
"
|
|
30
|
+
"source": "./document-model/index.ts",
|
|
26
31
|
"import": "./dist/document-model/index.js"
|
|
27
32
|
},
|
|
28
33
|
"./document-model/*": {
|
|
29
|
-
"
|
|
34
|
+
"source": "./document-model/*.ts",
|
|
30
35
|
"import": "./dist/document-model/*.js"
|
|
31
36
|
},
|
|
37
|
+
"./document-drive": {
|
|
38
|
+
"source": "./document-drive/index.ts",
|
|
39
|
+
"import": "./dist/document-drive/index.js"
|
|
40
|
+
},
|
|
41
|
+
"./document-drive/*": {
|
|
42
|
+
"source": "./document-drive/*.ts",
|
|
43
|
+
"import": "./dist/document-drive/*.js"
|
|
44
|
+
},
|
|
32
45
|
"./connect": {
|
|
33
|
-
"
|
|
46
|
+
"source": "./connect/index.ts",
|
|
34
47
|
"import": "./dist/connect/index.js"
|
|
35
48
|
},
|
|
36
49
|
"./connect/*": {
|
|
37
|
-
"
|
|
50
|
+
"source": "./connect/*.ts",
|
|
38
51
|
"import": "./dist/connect/*.js"
|
|
39
52
|
},
|
|
40
53
|
"./analytics": {
|
|
41
|
-
"
|
|
54
|
+
"source": "./analytics/index.ts",
|
|
42
55
|
"import": "./dist/analytics/index.js"
|
|
43
56
|
},
|
|
44
57
|
"./analytics/*": {
|
|
45
|
-
"
|
|
58
|
+
"source": "./analytics/*.ts",
|
|
46
59
|
"import": "./dist/analytics/*.js"
|
|
60
|
+
},
|
|
61
|
+
"./registry": {
|
|
62
|
+
"source": "./registry/index.ts",
|
|
63
|
+
"import": "./dist/registry/index.js"
|
|
64
|
+
},
|
|
65
|
+
"./registry/*": {
|
|
66
|
+
"source": "./registry/*.ts",
|
|
67
|
+
"import": "./dist/registry/*.js"
|
|
68
|
+
},
|
|
69
|
+
"./constants": {
|
|
70
|
+
"source": "./constants.ts",
|
|
71
|
+
"import": "./dist/constants.js"
|
|
72
|
+
},
|
|
73
|
+
"./clis": {
|
|
74
|
+
"source": "./clis/index.mts",
|
|
75
|
+
"import": "./dist/clis/index.mjs"
|
|
47
76
|
}
|
|
48
77
|
},
|
|
49
78
|
"dependencies": {
|
|
79
|
+
"@sentry/node": "^9.47.1",
|
|
50
80
|
"@sindresorhus/fnv1a": "3.1.0",
|
|
81
|
+
"chalk": "5.6.2",
|
|
82
|
+
"change-case": "5.4.4",
|
|
83
|
+
"cmd-ts": "0.15.0",
|
|
84
|
+
"enquirer": "2.4.1",
|
|
85
|
+
"jszip": "^3.10.1",
|
|
86
|
+
"kysely": "0.28.16",
|
|
51
87
|
"luxon": "3.7.2",
|
|
88
|
+
"mutative": "1.3.0",
|
|
89
|
+
"npm-package-arg": "13.0.2",
|
|
90
|
+
"package-directory": "^8.1.0",
|
|
91
|
+
"package-manager-detector": "1.6.0",
|
|
92
|
+
"remeda": "2.33.7",
|
|
93
|
+
"rolldown": "1.0.0-rc.8",
|
|
94
|
+
"safe-stable-stringify": "^2.4.3",
|
|
95
|
+
"sha1-uint8array": "^0.10.7",
|
|
96
|
+
"write-package": "7.2.0",
|
|
97
|
+
"zocker": "3.0.0",
|
|
52
98
|
"zod": "4.3.6"
|
|
53
99
|
},
|
|
54
100
|
"devDependencies": {
|
|
55
|
-
"mutative": "1.3.0",
|
|
56
|
-
"kysely": "0.28.11",
|
|
57
101
|
"@types/bun": "1.3.8",
|
|
58
102
|
"@types/luxon": "3.7.1",
|
|
103
|
+
"@types/npm-package-arg": "6.1.4",
|
|
59
104
|
"@types/react": "19.2.14",
|
|
60
|
-
"react": "19.2.4"
|
|
105
|
+
"react": "19.2.4",
|
|
106
|
+
"tsdown": "0.21.1",
|
|
107
|
+
"tsx": "4.21.0"
|
|
108
|
+
},
|
|
109
|
+
"scripts": {
|
|
110
|
+
"build": "tsx ./bundle.ts"
|
|
61
111
|
}
|
|
62
112
|
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { AnalyticsSerializerTypes } from "./constants.js";
|
|
2
|
-
export declare class AnalyticsPath {
|
|
3
|
-
get segments(): AnalyticsPathSegment[];
|
|
4
|
-
private _segments;
|
|
5
|
-
static fromString(path: string): AnalyticsPath;
|
|
6
|
-
static fromStringArray(segments: string[]): AnalyticsPath;
|
|
7
|
-
static fromArray(segments: AnalyticsPathSegment[]): AnalyticsPath;
|
|
8
|
-
static fromJSON(json: any): AnalyticsPath;
|
|
9
|
-
constructor(segments: AnalyticsPathSegment[]);
|
|
10
|
-
toJSON(): {
|
|
11
|
-
_t: AnalyticsSerializerTypes;
|
|
12
|
-
_v: string;
|
|
13
|
-
};
|
|
14
|
-
toString(tail?: string): string;
|
|
15
|
-
firstSegment(): AnalyticsPathSegment;
|
|
16
|
-
reduce(): AnalyticsPath;
|
|
17
|
-
applyLod(levelOfDetail: number): AnalyticsPath;
|
|
18
|
-
}
|
|
19
|
-
export declare class AnalyticsPathSegment {
|
|
20
|
-
get filters(): NullableStrings;
|
|
21
|
-
get groups(): NullableStrings;
|
|
22
|
-
private _filters;
|
|
23
|
-
private _groups;
|
|
24
|
-
static fromString(segment: string): AnalyticsPathSegment;
|
|
25
|
-
static escape(segment: string): string;
|
|
26
|
-
static unescape(segment: string): string;
|
|
27
|
-
constructor(filters?: NullableStrings, groups?: NullableStrings);
|
|
28
|
-
toJSON(): {
|
|
29
|
-
_t: AnalyticsSerializerTypes;
|
|
30
|
-
_v: string;
|
|
31
|
-
};
|
|
32
|
-
toString(): string;
|
|
33
|
-
}
|
|
34
|
-
type NullableStrings = string[] | null;
|
|
35
|
-
export {};
|
|
36
|
-
//# sourceMappingURL=analytics-path.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analytics-path.d.ts","sourceRoot":"","sources":["../../analytics/analytics-path.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE1D,qBAAa,aAAa;IACxB,IAAI,QAAQ,IAAI,oBAAoB,EAAE,CAErC;IAED,OAAO,CAAC,SAAS,CAAyB;WAE5B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa;WAQvC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,aAAa;WAMlD,SAAS,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,aAAa;WAI1D,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,aAAa;gBAOpC,QAAQ,EAAE,oBAAoB,EAAE;IAIrC,MAAM;;;;IAON,QAAQ,CAAC,IAAI,GAAE,MAAW,GAAG,MAAM;IAInC,YAAY,IAAI,oBAAoB;IAMpC,MAAM,IAAI,aAAa;IAUvB,QAAQ,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa;CAStD;AAED,qBAAa,oBAAoB;IAC/B,IAAI,OAAO,IAAI,eAAe,CAE7B;IACD,IAAI,MAAM,IAAI,eAAe,CAE5B;IAED,OAAO,CAAC,QAAQ,CAAyB;IACzC,OAAO,CAAC,OAAO,CAAyB;WAE1B,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,oBAAoB;WA0BjD,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;WAK/B,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;gBAKnC,OAAO,GAAE,eAAsB,EAAE,MAAM,GAAE,eAAoB;IAKlE,MAAM;;;;IAON,QAAQ,IAAI,MAAM;CAoB1B;AAED,KAAK,eAAe,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC"}
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unsafe-argument */
|
|
2
|
-
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
|
3
|
-
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
|
4
|
-
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
|
5
|
-
import { AnalyticsSerializerTypes } from "./constants.js";
|
|
6
|
-
export class AnalyticsPath {
|
|
7
|
-
get segments() {
|
|
8
|
-
return this._segments;
|
|
9
|
-
}
|
|
10
|
-
_segments;
|
|
11
|
-
static fromString(path) {
|
|
12
|
-
const segments = parseSeparatedList(path, "/").map((segment) => AnalyticsPathSegment.fromString(segment));
|
|
13
|
-
return new AnalyticsPath(segments);
|
|
14
|
-
}
|
|
15
|
-
static fromStringArray(segments) {
|
|
16
|
-
return new AnalyticsPath(segments.map((segment) => AnalyticsPathSegment.fromString(segment)));
|
|
17
|
-
}
|
|
18
|
-
static fromArray(segments) {
|
|
19
|
-
return new AnalyticsPath(segments);
|
|
20
|
-
}
|
|
21
|
-
static fromJSON(json) {
|
|
22
|
-
const segments = json._v
|
|
23
|
-
.split("/")
|
|
24
|
-
.map((segment) => AnalyticsPathSegment.fromString(segment));
|
|
25
|
-
return new AnalyticsPath(segments);
|
|
26
|
-
}
|
|
27
|
-
constructor(segments) {
|
|
28
|
-
this._segments = segments;
|
|
29
|
-
}
|
|
30
|
-
toJSON() {
|
|
31
|
-
return {
|
|
32
|
-
_t: AnalyticsSerializerTypes.AnalyticsPath,
|
|
33
|
-
_v: this.toString(),
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
toString(tail = "") {
|
|
37
|
-
return this._segments.map((s) => s.toString()).join("/") + tail;
|
|
38
|
-
}
|
|
39
|
-
firstSegment() {
|
|
40
|
-
return this._segments.length > 0
|
|
41
|
-
? this._segments[0]
|
|
42
|
-
: new AnalyticsPathSegment();
|
|
43
|
-
}
|
|
44
|
-
reduce() {
|
|
45
|
-
const result = this._segments.slice(1);
|
|
46
|
-
if (result.length < 1) {
|
|
47
|
-
result.push(new AnalyticsPathSegment());
|
|
48
|
-
}
|
|
49
|
-
return new AnalyticsPath(result);
|
|
50
|
-
}
|
|
51
|
-
applyLod(levelOfDetail) {
|
|
52
|
-
const segments = [...this._segments];
|
|
53
|
-
while (segments.length < levelOfDetail) {
|
|
54
|
-
segments.push(new AnalyticsPathSegment());
|
|
55
|
-
}
|
|
56
|
-
return new AnalyticsPath(segments.slice(0, levelOfDetail));
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
export class AnalyticsPathSegment {
|
|
60
|
-
get filters() {
|
|
61
|
-
return this._filters;
|
|
62
|
-
}
|
|
63
|
-
get groups() {
|
|
64
|
-
return this._groups;
|
|
65
|
-
}
|
|
66
|
-
_filters = null;
|
|
67
|
-
_groups = null;
|
|
68
|
-
static fromString(segment) {
|
|
69
|
-
const elements = parseSeparatedList(segment, ":");
|
|
70
|
-
let filtersArg;
|
|
71
|
-
if (elements[0] === "*") {
|
|
72
|
-
filtersArg = null;
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
filtersArg = parseSeparatedList(elements[0], ",").map((f) => AnalyticsPathSegment.unescape(f));
|
|
76
|
-
}
|
|
77
|
-
let groupsArg;
|
|
78
|
-
if (elements[1] === undefined || elements[1].length < 1) {
|
|
79
|
-
groupsArg = [];
|
|
80
|
-
}
|
|
81
|
-
else if (elements[1] === "*") {
|
|
82
|
-
groupsArg = null;
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
groupsArg = parseSeparatedList(elements[1], ",").map((g) => AnalyticsPathSegment.unescape(g));
|
|
86
|
-
}
|
|
87
|
-
return new AnalyticsPathSegment(filtersArg, groupsArg);
|
|
88
|
-
}
|
|
89
|
-
static escape(segment) {
|
|
90
|
-
// Put a backslash in front of the control characters \ : / and ,
|
|
91
|
-
return segment.replace(/(\\|:|\/|,)/gi, "\\$1");
|
|
92
|
-
}
|
|
93
|
-
static unescape(segment) {
|
|
94
|
-
// Remove backslashes in front of any character
|
|
95
|
-
return segment.replace(/\\(.)/gi, "$1");
|
|
96
|
-
}
|
|
97
|
-
constructor(filters = null, groups = []) {
|
|
98
|
-
this._filters = filters;
|
|
99
|
-
this._groups = groups;
|
|
100
|
-
}
|
|
101
|
-
toJSON() {
|
|
102
|
-
return {
|
|
103
|
-
_t: AnalyticsSerializerTypes.AnalyticsPathSegment,
|
|
104
|
-
_v: this.toString(),
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
toString() {
|
|
108
|
-
let result = "";
|
|
109
|
-
if (this._filters === null) {
|
|
110
|
-
result += "*";
|
|
111
|
-
}
|
|
112
|
-
else {
|
|
113
|
-
result += this._filters
|
|
114
|
-
.map((f) => AnalyticsPathSegment.escape(f))
|
|
115
|
-
.join(",");
|
|
116
|
-
}
|
|
117
|
-
if (this._groups === null) {
|
|
118
|
-
result += ":*";
|
|
119
|
-
}
|
|
120
|
-
else if (this._groups.length > 0) {
|
|
121
|
-
result +=
|
|
122
|
-
":" + this._groups.map((g) => AnalyticsPathSegment.escape(g)).join(",");
|
|
123
|
-
}
|
|
124
|
-
return result;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
// Defining constant regexes instead of dynamic patterns for compiler optimization
|
|
128
|
-
const unescapedSeparatorPattern = {
|
|
129
|
-
":": /(?<!\\):/,
|
|
130
|
-
",": /(?<!\\),/,
|
|
131
|
-
"/": /(?<!\\)\//,
|
|
132
|
-
};
|
|
133
|
-
function parseSeparatedList(list, separator) {
|
|
134
|
-
/*
|
|
135
|
-
The basic mechanism is that we split the string by commas that
|
|
136
|
-
aren't escaped with a backslash, using the unescapedSeparatorPattern:
|
|
137
|
-
|
|
138
|
-
- abc,def becomes ['abc', 'def']
|
|
139
|
-
- abc\,def becomes ['abc,def']
|
|
140
|
-
|
|
141
|
-
However, we need to deal with an edge case where the backslash
|
|
142
|
-
itself is escaped with a backslash:
|
|
143
|
-
|
|
144
|
-
- abc\\,def must result in ['abc\\', 'def']
|
|
145
|
-
- whereas unescapedCommaPattern would result in ['abc\\,def']
|
|
146
|
-
|
|
147
|
-
For this edge case, we are first replacing all double backslashes with @@
|
|
148
|
-
|
|
149
|
-
- abc\\,def is first transformed to abc@@,def
|
|
150
|
-
- unescapedCommaPattern would now result in ['abc@@', 'def']
|
|
151
|
-
- substituting @@ with \\ again now gives the intended result ['abc\\', 'def']
|
|
152
|
-
|
|
153
|
-
However, we still want to support the literal string @@ in the input too.
|
|
154
|
-
So, instead of always using @@ as a replacement, we're going to determine a unique
|
|
155
|
-
string first by adding as many @ as needed.
|
|
156
|
-
|
|
157
|
-
- If the original string has @@ in it, we'll use @@@
|
|
158
|
-
- If the original string has @@ and @@@ in it, we'll use @@@@
|
|
159
|
-
- Etc.
|
|
160
|
-
*/
|
|
161
|
-
let substituteString = "@@";
|
|
162
|
-
while (list.indexOf(substituteString) > -1) {
|
|
163
|
-
substituteString += "@";
|
|
164
|
-
}
|
|
165
|
-
return list
|
|
166
|
-
.replaceAll("\\\\", substituteString)
|
|
167
|
-
.split(unescapedSeparatorPattern[separator])
|
|
168
|
-
.map((e) => e.replaceAll(substituteString, "\\\\"));
|
|
169
|
-
}
|
|
170
|
-
//# sourceMappingURL=analytics-path.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analytics-path.js","sourceRoot":"","sources":["../../analytics/analytics-path.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { AnalyticsPeriodType, AnalyticsSerializerTypes } from "./constants.js";
|
|
2
|
-
export declare class AnalyticsPeriod {
|
|
3
|
-
get type(): AnalyticsPeriodType;
|
|
4
|
-
get year(): number;
|
|
5
|
-
get quarter(): number | null;
|
|
6
|
-
get month(): number | null;
|
|
7
|
-
private _type;
|
|
8
|
-
private _year;
|
|
9
|
-
private _quarter;
|
|
10
|
-
private _month;
|
|
11
|
-
toJSON(): {
|
|
12
|
-
_t: AnalyticsSerializerTypes;
|
|
13
|
-
_v: string;
|
|
14
|
-
};
|
|
15
|
-
static fromString(period: string): AnalyticsPeriod;
|
|
16
|
-
static fillRange(p1: AnalyticsPeriod | string, p2: AnalyticsPeriod | string): AnalyticsPeriod[];
|
|
17
|
-
static normalizeQuarters(year: number, quarter: number): PeriodTriple;
|
|
18
|
-
static normalizeMonths(year: number, month: number): PeriodTriple;
|
|
19
|
-
constructor(year: number, quarter?: number, month?: number);
|
|
20
|
-
equals(period: AnalyticsPeriod | string): boolean;
|
|
21
|
-
toString(): string;
|
|
22
|
-
startAsSqlDate(): string;
|
|
23
|
-
comesAfter(period: AnalyticsPeriod): boolean;
|
|
24
|
-
comesBefore(period: AnalyticsPeriod): boolean;
|
|
25
|
-
contains(period: AnalyticsPeriod): boolean;
|
|
26
|
-
firstMonth(): AnalyticsPeriod;
|
|
27
|
-
lastMonth(): AnalyticsPeriod;
|
|
28
|
-
nextPeriod(n?: number): AnalyticsPeriod;
|
|
29
|
-
previousPeriod(n?: number): AnalyticsPeriod;
|
|
30
|
-
private _start;
|
|
31
|
-
private _end;
|
|
32
|
-
private _getNumericComparator;
|
|
33
|
-
private _addPeriods;
|
|
34
|
-
private _initAsYear;
|
|
35
|
-
private _initAsQuarter;
|
|
36
|
-
private _initAsMonth;
|
|
37
|
-
}
|
|
38
|
-
type PeriodTriple = [number, number | undefined, number | undefined];
|
|
39
|
-
export {};
|
|
40
|
-
//# sourceMappingURL=analytics-period.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analytics-period.d.ts","sourceRoot":"","sources":["../../analytics/analytics-period.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE/E,qBAAa,eAAe;IAC1B,IAAI,IAAI,IAAI,mBAAmB,CAE9B;IACD,IAAI,IAAI,IAAI,MAAM,CAEjB;IACD,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAE3B;IACD,IAAI,KAAK,IAAI,MAAM,GAAG,IAAI,CAEzB;IAED,OAAO,CAAC,KAAK,CAAiD;IAC9D,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,MAAM,CAAuB;IAE9B,MAAM;;;;WAOC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe;WA2B3C,SAAS,CACrB,EAAE,EAAE,eAAe,GAAG,MAAM,EAC5B,EAAE,EAAE,eAAe,GAAG,MAAM,GAC3B,eAAe,EAAE;WA0BN,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY;WAM9D,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,YAAY;gBAOrD,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;IAY1D,MAAM,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,GAAG,OAAO;IAOjD,QAAQ,IAAI,MAAM;IAgBlB,cAAc,IAAI,MAAM;IAsBxB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO;IAI5C,WAAW,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO;IAI7C,QAAQ,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO;IAI1C,UAAU,IAAI,eAAe;IAU7B,SAAS,IAAI,eAAe;IAU5B,UAAU,CAAC,CAAC,GAAE,MAAU,GAAG,eAAe;IAI1C,cAAc,CAAC,CAAC,GAAE,MAAU,GAAG,eAAe;IAIrD,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,WAAW;IAsBnB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,YAAY;CAgBrB;AAOD,KAAK,YAAY,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC"}
|