@sera4/essentia 3.0.13 → 3.1.0-rc.1
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 +93 -308
- package/dist/ts/cache/index.d.ts +33 -0
- package/dist/ts/cache/index.js +175 -0
- package/dist/ts/cache/index.js.map +1 -0
- package/dist/ts/configurations/server-config.d.ts +4 -0
- package/dist/ts/configurations/server-config.js +2 -0
- package/dist/ts/configurations/server-config.js.map +1 -0
- package/dist/ts/constants/index.d.ts +7 -0
- package/dist/ts/constants/index.js +8 -0
- package/dist/ts/constants/index.js.map +1 -0
- package/dist/ts/cycle/index.d.ts +53 -0
- package/dist/ts/cycle/index.js +171 -0
- package/dist/ts/cycle/index.js.map +1 -0
- package/dist/ts/dns/dns-cache.d.ts +50 -0
- package/dist/ts/dns/dns-cache.js +144 -0
- package/dist/ts/dns/dns-cache.js.map +1 -0
- package/dist/ts/dns/index.d.ts +4 -0
- package/dist/ts/dns/index.js +4 -0
- package/dist/ts/dns/index.js.map +1 -0
- package/dist/ts/formatter/index.d.ts +45 -0
- package/dist/ts/formatter/index.js +82 -0
- package/dist/ts/formatter/index.js.map +1 -0
- package/dist/ts/hal/index.d.ts +26 -0
- package/dist/ts/hal/index.js +70 -0
- package/dist/ts/hal/index.js.map +1 -0
- package/dist/ts/health/index.d.ts +52 -0
- package/dist/ts/health/index.js +170 -0
- package/dist/ts/health/index.js.map +1 -0
- package/dist/ts/helpers/index.d.ts +1 -0
- package/dist/ts/helpers/index.js +2 -0
- package/dist/ts/helpers/index.js.map +1 -0
- package/dist/ts/helpers/test-server-wrapper.d.ts +56 -0
- package/dist/ts/helpers/test-server-wrapper.js +153 -0
- package/dist/ts/helpers/test-server-wrapper.js.map +1 -0
- package/{index.js → dist/ts/index.d.ts} +14 -11
- package/dist/ts/index.js +25 -0
- package/dist/ts/index.js.map +1 -0
- package/dist/ts/last-commit/index.d.ts +12 -0
- package/dist/ts/last-commit/index.js +82 -0
- package/dist/ts/last-commit/index.js.map +1 -0
- package/dist/ts/logger/index.d.ts +4 -0
- package/dist/ts/logger/index.js +5 -0
- package/dist/ts/logger/index.js.map +1 -0
- package/dist/ts/logger/s4-logger.d.ts +41 -0
- package/dist/ts/logger/s4-logger.js +134 -0
- package/dist/ts/logger/s4-logger.js.map +1 -0
- package/dist/ts/paginator/index.d.ts +2 -0
- package/dist/ts/paginator/index.js +3 -0
- package/dist/ts/paginator/index.js.map +1 -0
- package/dist/ts/paginator/s4-pagination.d.ts +28 -0
- package/dist/ts/paginator/s4-pagination.js +49 -0
- package/dist/ts/paginator/s4-pagination.js.map +1 -0
- package/dist/ts/paginator/sql-pagination.d.ts +52 -0
- package/dist/ts/paginator/sql-pagination.js +176 -0
- package/dist/ts/paginator/sql-pagination.js.map +1 -0
- package/dist/ts/paper-trail/helpers.d.ts +14 -0
- package/dist/ts/paper-trail/helpers.js +72 -0
- package/dist/ts/paper-trail/helpers.js.map +1 -0
- package/dist/ts/paper-trail/index.d.ts +54 -0
- package/dist/ts/paper-trail/index.js +235 -0
- package/dist/ts/paper-trail/index.js.map +1 -0
- package/dist/ts/prompts/index.d.ts +21 -0
- package/dist/ts/prompts/index.js +68 -0
- package/dist/ts/prompts/index.js.map +1 -0
- package/dist/ts/queue/index.d.ts +232 -0
- package/dist/ts/queue/index.js +446 -0
- package/dist/ts/queue/index.js.map +1 -0
- package/dist/ts/queue/publisher.d.ts +41 -0
- package/dist/ts/queue/publisher.js +87 -0
- package/dist/ts/queue/publisher.js.map +1 -0
- package/dist/ts/queue/queue-logger.d.ts +10 -0
- package/dist/ts/queue/queue-logger.js +35 -0
- package/dist/ts/queue/queue-logger.js.map +1 -0
- package/dist/ts/queue/subscriber.d.ts +55 -0
- package/dist/ts/queue/subscriber.js +104 -0
- package/dist/ts/queue/subscriber.js.map +1 -0
- package/dist/ts/safe-proxy/index.d.ts +24 -0
- package/dist/ts/safe-proxy/index.js +50 -0
- package/dist/ts/safe-proxy/index.js.map +1 -0
- package/dist/ts/serializer/index.d.ts +52 -0
- package/dist/ts/serializer/index.js +83 -0
- package/dist/ts/serializer/index.js.map +1 -0
- package/dist/ts/task-scheduler/index.d.ts +130 -0
- package/dist/ts/task-scheduler/index.js +261 -0
- package/dist/ts/task-scheduler/index.js.map +1 -0
- package/dist/ts/utils/index.d.ts +49 -0
- package/dist/ts/utils/index.js +162 -0
- package/dist/ts/utils/index.js.map +1 -0
- package/last-commit.ts +12 -0
- package/package.json +28 -11
- package/package.tar.gz +0 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import pkg from "deep-diff";
|
|
2
|
+
import _ from "lodash";
|
|
3
|
+
const { diff } = pkg;
|
|
4
|
+
const capitalizeFirstLetter = (string) => string.charAt(0).toUpperCase() + string.slice(1);
|
|
5
|
+
const toUnderscored = (obj) => {
|
|
6
|
+
_.forEach(obj, (k, v) => {
|
|
7
|
+
obj[k] = v.replace(/(?:^|\.?)([A-Z])/g, (_x, y) => `_${y.toLowerCase()}`).replace(/^_/, "");
|
|
8
|
+
});
|
|
9
|
+
return obj;
|
|
10
|
+
};
|
|
11
|
+
const calcDelta = (current, next, exclude, strict, DEBUG = false) => {
|
|
12
|
+
if (DEBUG) {
|
|
13
|
+
console.log("current", current);
|
|
14
|
+
console.log("next", next);
|
|
15
|
+
console.log("exclude", exclude);
|
|
16
|
+
}
|
|
17
|
+
const di = diff(current, next);
|
|
18
|
+
if (DEBUG) {
|
|
19
|
+
console.log("di", di);
|
|
20
|
+
let diffs2 = [];
|
|
21
|
+
if (di) {
|
|
22
|
+
diffs2 = di.map((i) => JSON.parse(JSON.stringify(i).replace('"__data",', "")));
|
|
23
|
+
}
|
|
24
|
+
console.log("diffs2", diffs2);
|
|
25
|
+
console.log("filter1", diffs2.filter((i) => i.path.join(",").indexOf("_") === -1));
|
|
26
|
+
console.log("filter2", diffs2.filter((i) => exclude.every((x) => i.path.indexOf(x) === -1)));
|
|
27
|
+
}
|
|
28
|
+
let diffs = [];
|
|
29
|
+
if (di) {
|
|
30
|
+
diffs = di
|
|
31
|
+
.map((i) => JSON.parse(JSON.stringify(i).replace('"__data",', "")))
|
|
32
|
+
.filter((i) => {
|
|
33
|
+
if (!strict && i.kind === "E") {
|
|
34
|
+
// biome-ignore lint/suspicious/noDoubleEquals: intentional loose equality for non-strict mode
|
|
35
|
+
if (i.lhs != i.rhs)
|
|
36
|
+
return i;
|
|
37
|
+
}
|
|
38
|
+
else
|
|
39
|
+
return i;
|
|
40
|
+
return false;
|
|
41
|
+
})
|
|
42
|
+
.filter((i) => exclude.every((x) => i.path.indexOf(x) === -1));
|
|
43
|
+
}
|
|
44
|
+
if (diffs.length > 0) {
|
|
45
|
+
return diffs;
|
|
46
|
+
}
|
|
47
|
+
return null;
|
|
48
|
+
};
|
|
49
|
+
const diffToString = (val) => {
|
|
50
|
+
if (typeof val === "undefined" || val === null)
|
|
51
|
+
return "";
|
|
52
|
+
if (val === true)
|
|
53
|
+
return "1";
|
|
54
|
+
if (val === false)
|
|
55
|
+
return "0";
|
|
56
|
+
if (typeof val === "string")
|
|
57
|
+
return val;
|
|
58
|
+
if (!Number.isNaN(Number(val)))
|
|
59
|
+
return `${String(val)}`;
|
|
60
|
+
if ((typeof val === "undefined" ? "undefined" : typeof val) === "object")
|
|
61
|
+
return `${JSON.stringify(val)}`;
|
|
62
|
+
if (Array.isArray(val))
|
|
63
|
+
return `${JSON.stringify(val)}`;
|
|
64
|
+
return "";
|
|
65
|
+
};
|
|
66
|
+
export default {
|
|
67
|
+
capitalizeFirstLetter,
|
|
68
|
+
toUnderscored,
|
|
69
|
+
calcDelta,
|
|
70
|
+
diffToString,
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../ts/paper-trail/helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
interface PaperTrailOptions {
|
|
2
|
+
debug?: boolean;
|
|
3
|
+
log?: any;
|
|
4
|
+
exclude?: string[];
|
|
5
|
+
excludeExtras?: string[];
|
|
6
|
+
excludeVirtualAttributes?: boolean;
|
|
7
|
+
censor?: string[];
|
|
8
|
+
revisionAttribute?: string;
|
|
9
|
+
revisionModel?: string;
|
|
10
|
+
revisionChangeModel?: string;
|
|
11
|
+
enableRevisionChangeModel?: boolean;
|
|
12
|
+
UUID?: boolean;
|
|
13
|
+
mixedDocumentReference?: boolean;
|
|
14
|
+
underscored?: boolean;
|
|
15
|
+
underscoredAttributes?: boolean;
|
|
16
|
+
includeReferences?: string[];
|
|
17
|
+
defaultAttributes?: {
|
|
18
|
+
documentId: string;
|
|
19
|
+
revisionId: string;
|
|
20
|
+
autoGenerated: string;
|
|
21
|
+
documentUuid?: string;
|
|
22
|
+
};
|
|
23
|
+
als?: any;
|
|
24
|
+
userModel?: boolean;
|
|
25
|
+
userModelAttribute?: string;
|
|
26
|
+
tenantModel?: boolean;
|
|
27
|
+
tenantModelAttribute?: string;
|
|
28
|
+
enableCompression?: boolean;
|
|
29
|
+
enableMigration?: boolean;
|
|
30
|
+
enableStrictDiff?: boolean;
|
|
31
|
+
continuationNamespace?: any;
|
|
32
|
+
continuationKey?: string;
|
|
33
|
+
continuationTenantKey?: string;
|
|
34
|
+
metaDataFields?: any;
|
|
35
|
+
metaDataContinuationKey?: string;
|
|
36
|
+
mysql?: boolean;
|
|
37
|
+
}
|
|
38
|
+
interface ModelInstance {
|
|
39
|
+
get: (key?: string) => Record<string, any> | any;
|
|
40
|
+
set: (key: string, value: any) => void;
|
|
41
|
+
save: () => Promise<any>;
|
|
42
|
+
[key: string]: any;
|
|
43
|
+
}
|
|
44
|
+
interface ModelOptions {
|
|
45
|
+
noPaperTrail?: boolean;
|
|
46
|
+
[key: string]: any;
|
|
47
|
+
}
|
|
48
|
+
declare const paperTrail: {
|
|
49
|
+
init: (sequelize: any, sequelizePackage: any, optionsArg?: PaperTrailOptions) => void;
|
|
50
|
+
hasPaperTrail: () => boolean;
|
|
51
|
+
defineModels: (db: any) => void;
|
|
52
|
+
};
|
|
53
|
+
export default paperTrail;
|
|
54
|
+
export type { ModelInstance, ModelOptions, PaperTrailOptions };
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import _ from "lodash";
|
|
2
|
+
import helpers from "./helpers.js";
|
|
3
|
+
const failHard = false;
|
|
4
|
+
let Sequelize = null;
|
|
5
|
+
const paperTrail = {
|
|
6
|
+
init: (sequelize, sequelizePackage, optionsArg) => {
|
|
7
|
+
Sequelize = sequelizePackage;
|
|
8
|
+
// In case that options is being parsed as a readonly attribute.
|
|
9
|
+
// Or it is not passed at all
|
|
10
|
+
const optsArg = _.cloneDeep(optionsArg || {});
|
|
11
|
+
const defaultOptions = {
|
|
12
|
+
debug: false,
|
|
13
|
+
log: null,
|
|
14
|
+
exclude: [
|
|
15
|
+
"id",
|
|
16
|
+
"createdAt",
|
|
17
|
+
"updatedAt",
|
|
18
|
+
"deletedAt",
|
|
19
|
+
"created_at",
|
|
20
|
+
"updated_at",
|
|
21
|
+
"deleted_at",
|
|
22
|
+
"audit_source",
|
|
23
|
+
"revision",
|
|
24
|
+
],
|
|
25
|
+
// additional fields to exclude on a global basis
|
|
26
|
+
excludeExtras: [],
|
|
27
|
+
excludeVirtualAttributes: true, // by default do not record these
|
|
28
|
+
censor: ["password", "password_salt", "temp_secret", "mfa_totp_secret"],
|
|
29
|
+
revisionAttribute: "revision",
|
|
30
|
+
revisionModel: "Revision",
|
|
31
|
+
revisionChangeModel: "RevisionChange",
|
|
32
|
+
enableRevisionChangeModel: false,
|
|
33
|
+
UUID: false,
|
|
34
|
+
// does this project use int's and UUIDs for some references (postgres)
|
|
35
|
+
mixedDocumentReference: false,
|
|
36
|
+
underscored: false,
|
|
37
|
+
underscoredAttributes: false,
|
|
38
|
+
// always store these keys in a reference value if seen
|
|
39
|
+
includeReferences: [],
|
|
40
|
+
defaultAttributes: {
|
|
41
|
+
documentId: "documentId",
|
|
42
|
+
revisionId: "revisionId",
|
|
43
|
+
autoGenerated: "autoGenerated",
|
|
44
|
+
},
|
|
45
|
+
als: null,
|
|
46
|
+
userModel: false,
|
|
47
|
+
userModelAttribute: "userId",
|
|
48
|
+
tenantModel: false,
|
|
49
|
+
tenantModelAttribute: "tenantId",
|
|
50
|
+
enableCompression: false,
|
|
51
|
+
enableMigration: false,
|
|
52
|
+
enableStrictDiff: true,
|
|
53
|
+
continuationNamespace: null,
|
|
54
|
+
continuationKey: "userId",
|
|
55
|
+
continuationTenantKey: "tenantId",
|
|
56
|
+
metaDataFields: null,
|
|
57
|
+
metaDataContinuationKey: "metaData",
|
|
58
|
+
mysql: false,
|
|
59
|
+
};
|
|
60
|
+
if (optsArg.mixedDocumentReference)
|
|
61
|
+
defaultOptions.defaultAttributes.documentUuid = "documentUuid";
|
|
62
|
+
if (optsArg.underscoredAttributes) {
|
|
63
|
+
helpers.toUnderscored(defaultOptions.defaultAttributes);
|
|
64
|
+
}
|
|
65
|
+
// deals with not wanting to overwrite the initial ones, just add some
|
|
66
|
+
if (optsArg.excludeExtras) {
|
|
67
|
+
if (optsArg.exclude) {
|
|
68
|
+
optsArg.exclude = [...optsArg.exclude, ...optsArg.excludeExtras];
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
optsArg.exclude = [...defaultOptions.exclude, ...optsArg.excludeExtras];
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
const options = _.defaults(optsArg, defaultOptions);
|
|
75
|
+
const log = options.log || console.log;
|
|
76
|
+
function createBeforeHook(_operation) {
|
|
77
|
+
const beforeHook = function beforeHook(instance, opt) {
|
|
78
|
+
if (options.debug) {
|
|
79
|
+
log("beforeHook called");
|
|
80
|
+
log("instance:", instance);
|
|
81
|
+
log("opt:", opt);
|
|
82
|
+
}
|
|
83
|
+
if (opt.noPaperTrail) {
|
|
84
|
+
if (options.debug) {
|
|
85
|
+
log("noPaperTrail set, skipping");
|
|
86
|
+
}
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// Store the original values for comparison
|
|
90
|
+
const originalValues = instance.get();
|
|
91
|
+
instance.set("_paperTrailOriginalValues", originalValues);
|
|
92
|
+
};
|
|
93
|
+
return beforeHook;
|
|
94
|
+
}
|
|
95
|
+
function createAfterHook(operation) {
|
|
96
|
+
const afterHook = function afterHook(instance, opt) {
|
|
97
|
+
if (options.debug) {
|
|
98
|
+
log("afterHook called");
|
|
99
|
+
log("instance:", instance);
|
|
100
|
+
log("opt:", opt);
|
|
101
|
+
}
|
|
102
|
+
if (opt.noPaperTrail) {
|
|
103
|
+
if (options.debug) {
|
|
104
|
+
log("noPaperTrail set, skipping");
|
|
105
|
+
}
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
// Get the original values and current values
|
|
109
|
+
const originalValues = instance.get("_paperTrailOriginalValues") || {};
|
|
110
|
+
const currentValues = instance.get();
|
|
111
|
+
// Remove the temporary field
|
|
112
|
+
delete currentValues._paperTrailOriginalValues;
|
|
113
|
+
// Calculate differences
|
|
114
|
+
const differences = helpers.calcDelta(originalValues, currentValues, options.exclude || [], options.enableStrictDiff || false, options.debug);
|
|
115
|
+
if (differences && differences.length > 0) {
|
|
116
|
+
// Create revision record
|
|
117
|
+
const revisionData = {
|
|
118
|
+
documentId: instance.get(options.defaultAttributes.documentId),
|
|
119
|
+
revision: instance.get(options.revisionAttribute),
|
|
120
|
+
document: JSON.stringify(currentValues),
|
|
121
|
+
operation: operation,
|
|
122
|
+
changes: JSON.stringify(differences),
|
|
123
|
+
createdAt: new Date(),
|
|
124
|
+
};
|
|
125
|
+
// Add user information if available
|
|
126
|
+
if (options.userModel && options.als) {
|
|
127
|
+
const user = options.als.get(options.continuationKey);
|
|
128
|
+
if (user) {
|
|
129
|
+
revisionData[options.userModelAttribute] = user;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Add tenant information if available
|
|
133
|
+
if (options.tenantModel && options.als) {
|
|
134
|
+
const tenant = options.als.get(options.continuationTenantKey);
|
|
135
|
+
if (tenant) {
|
|
136
|
+
revisionData[options.tenantModelAttribute] = tenant;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Save revision
|
|
140
|
+
const Revision = sequelize.models[options.revisionModel];
|
|
141
|
+
if (Revision) {
|
|
142
|
+
Revision.create(revisionData).catch((err) => {
|
|
143
|
+
if (failHard) {
|
|
144
|
+
throw err;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
log("Error creating revision:", err);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
};
|
|
153
|
+
return afterHook;
|
|
154
|
+
}
|
|
155
|
+
// Add hooks to all models
|
|
156
|
+
Object.keys(sequelize.models).forEach((modelName) => {
|
|
157
|
+
const model = sequelize.models[modelName];
|
|
158
|
+
// Add before hooks
|
|
159
|
+
model.addHook("beforeCreate", createBeforeHook("create"));
|
|
160
|
+
model.addHook("beforeUpdate", createBeforeHook("update"));
|
|
161
|
+
model.addHook("beforeDestroy", createBeforeHook("destroy"));
|
|
162
|
+
// Add after hooks
|
|
163
|
+
model.addHook("afterCreate", createAfterHook("create"));
|
|
164
|
+
model.addHook("afterUpdate", createAfterHook("update"));
|
|
165
|
+
model.addHook("afterDestroy", createAfterHook("destroy"));
|
|
166
|
+
});
|
|
167
|
+
},
|
|
168
|
+
hasPaperTrail: function hasPaperTrail() {
|
|
169
|
+
return Sequelize !== null;
|
|
170
|
+
},
|
|
171
|
+
defineModels: function defineModels(db) {
|
|
172
|
+
if (!Sequelize) {
|
|
173
|
+
throw new Error("PaperTrail not initialized. Call paperTrail.init() first.");
|
|
174
|
+
}
|
|
175
|
+
const Revision = db.define("Revision", {
|
|
176
|
+
id: {
|
|
177
|
+
type: Sequelize.INTEGER,
|
|
178
|
+
primaryKey: true,
|
|
179
|
+
autoIncrement: true,
|
|
180
|
+
},
|
|
181
|
+
documentId: {
|
|
182
|
+
type: Sequelize.STRING,
|
|
183
|
+
allowNull: false,
|
|
184
|
+
},
|
|
185
|
+
revision: {
|
|
186
|
+
type: Sequelize.INTEGER,
|
|
187
|
+
allowNull: false,
|
|
188
|
+
},
|
|
189
|
+
document: {
|
|
190
|
+
type: Sequelize.TEXT,
|
|
191
|
+
allowNull: false,
|
|
192
|
+
},
|
|
193
|
+
operation: {
|
|
194
|
+
type: Sequelize.STRING,
|
|
195
|
+
allowNull: false,
|
|
196
|
+
},
|
|
197
|
+
changes: {
|
|
198
|
+
type: Sequelize.TEXT,
|
|
199
|
+
allowNull: true,
|
|
200
|
+
},
|
|
201
|
+
userId: {
|
|
202
|
+
type: Sequelize.INTEGER,
|
|
203
|
+
allowNull: true,
|
|
204
|
+
},
|
|
205
|
+
tenantId: {
|
|
206
|
+
type: Sequelize.INTEGER,
|
|
207
|
+
allowNull: true,
|
|
208
|
+
},
|
|
209
|
+
createdAt: {
|
|
210
|
+
type: Sequelize.DATE,
|
|
211
|
+
allowNull: false,
|
|
212
|
+
},
|
|
213
|
+
}, {
|
|
214
|
+
tableName: "revisions",
|
|
215
|
+
timestamps: false,
|
|
216
|
+
});
|
|
217
|
+
// Add associations if user and tenant models exist
|
|
218
|
+
if (db.models.User) {
|
|
219
|
+
Revision.belongsTo(db.models.User, { foreignKey: "userId" });
|
|
220
|
+
}
|
|
221
|
+
if (db.models.Tenant) {
|
|
222
|
+
Revision.belongsTo(db.models.Tenant, { foreignKey: "tenantId" });
|
|
223
|
+
}
|
|
224
|
+
Revision.associate = function associate(models) {
|
|
225
|
+
if (models.User) {
|
|
226
|
+
Revision.belongsTo(models.User, { foreignKey: "userId" });
|
|
227
|
+
}
|
|
228
|
+
if (models.Tenant) {
|
|
229
|
+
Revision.belongsTo(models.Tenant, { foreignKey: "tenantId" });
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
},
|
|
233
|
+
};
|
|
234
|
+
export default paperTrail;
|
|
235
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../ts/paper-trail/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ArgumentParser } from "argparse";
|
|
2
|
+
interface CLIInitOptions {
|
|
3
|
+
asyncFcns?: (() => Promise<void>)[];
|
|
4
|
+
extraFcns?: (() => void)[];
|
|
5
|
+
sleepTime?: number;
|
|
6
|
+
}
|
|
7
|
+
interface PromptOptions {
|
|
8
|
+
[key: string]: {
|
|
9
|
+
type: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
required?: boolean;
|
|
12
|
+
default?: any;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
declare const setupCLIParser: (description: string) => ArgumentParser;
|
|
16
|
+
declare const commonCLIInit: (options?: CLIInitOptions) => Promise<void>;
|
|
17
|
+
declare const promptCLIAsync: (options: PromptOptions) => Promise<Record<string, any>>;
|
|
18
|
+
declare const waitCLIPrompt: PromptOptions;
|
|
19
|
+
declare const continueCLIPrompt: PromptOptions;
|
|
20
|
+
declare const cliSleep: (ms: number) => Promise<void>;
|
|
21
|
+
export { type CLIInitOptions, cliSleep, commonCLIInit, continueCLIPrompt, type PromptOptions, promptCLIAsync, setupCLIParser, waitCLIPrompt, };
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/* Essentia Common Prompt Functions */
|
|
2
|
+
// This file contains common prompt functions that are used in CLI scripts
|
|
3
|
+
// that are run in the each project. These functions are used to
|
|
4
|
+
// prompt the user for input and to wait for the user to press enter
|
|
5
|
+
// before continuing. This is useful for scripts that are run in the
|
|
6
|
+
// command line and need to wait for the user to do something before
|
|
7
|
+
// continuing.
|
|
8
|
+
import { ArgumentParser } from "argparse";
|
|
9
|
+
import prompt from "prompt";
|
|
10
|
+
import { S4Logger } from "../logger/s4-logger.js";
|
|
11
|
+
const logger = new S4Logger();
|
|
12
|
+
// New common argument parser which makes parsing and setting up commandline options easier
|
|
13
|
+
const setupCLIParser = (description) => {
|
|
14
|
+
logger.info(description);
|
|
15
|
+
return new ArgumentParser({ description });
|
|
16
|
+
};
|
|
17
|
+
// a common init function which waits for the command prompt to be delivered
|
|
18
|
+
// a common use is for the awaiting of the queues to initialize before running
|
|
19
|
+
const commonCLIInit = async (options = {}) => {
|
|
20
|
+
//add in defaults to options if they have not been specified or object is {}
|
|
21
|
+
const defaultOptions = {
|
|
22
|
+
asyncFcns: [],
|
|
23
|
+
extraFcns: [],
|
|
24
|
+
sleepTime: 1000,
|
|
25
|
+
...options,
|
|
26
|
+
};
|
|
27
|
+
// Sleep for 1 second to allow the prompt to be displayed
|
|
28
|
+
// at the end of bootstrap logs
|
|
29
|
+
await cliSleep(defaultOptions.sleepTime);
|
|
30
|
+
defaultOptions.extraFcns.forEach((fcn) => {
|
|
31
|
+
fcn();
|
|
32
|
+
});
|
|
33
|
+
for (const fcn of defaultOptions.asyncFcns) {
|
|
34
|
+
await fcn();
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const promptCLIAsync = async (options) => {
|
|
38
|
+
return new Promise((resolve, reject) => {
|
|
39
|
+
prompt.start();
|
|
40
|
+
prompt.get(options, (err, res) => {
|
|
41
|
+
if (err) {
|
|
42
|
+
reject(err);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
resolve(res);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
});
|
|
49
|
+
};
|
|
50
|
+
// A predefined waitPrompt for use at the end of the scripts that use
|
|
51
|
+
// message queues. Message Queues often take a bit to fire
|
|
52
|
+
const waitCLIPrompt = {
|
|
53
|
+
"Push <enter> when done": {
|
|
54
|
+
type: "boolean",
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
const continueCLIPrompt = {
|
|
58
|
+
"Push <enter> to continue": {
|
|
59
|
+
type: "boolean",
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
const cliSleep = async (ms) => {
|
|
63
|
+
return new Promise((resolve) => {
|
|
64
|
+
setTimeout(resolve, ms);
|
|
65
|
+
});
|
|
66
|
+
};
|
|
67
|
+
export { cliSleep, commonCLIInit, continueCLIPrompt, promptCLIAsync, setupCLIParser, waitCLIPrompt, };
|
|
68
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../ts/prompts/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,0EAA0E;AAC1E,kEAAkE;AAClE,qEAAqE;AACrE,sEAAsE;AACtE,qEAAqE;AACrE,eAAe;AAEf,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;AAiB9B,2FAA2F;AAC3F,MAAM,cAAc,GAAG,CAAC,WAAmB,EAAkB,EAAE;IAC7D,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzB,OAAO,IAAI,cAAc,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;AAC7C,CAAC,CAAC;AAEF,4EAA4E;AAC5E,8EAA8E;AAC9E,MAAM,aAAa,GAAG,KAAK,EAAE,UAA0B,EAAE,EAAiB,EAAE;IAC1E,4EAA4E;IAC5E,MAAM,cAAc,GAA6B;QAC/C,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,IAAI;QACf,GAAG,OAAO;KACX,CAAC;IAEF,yDAAyD;IACzD,+BAA+B;IAC/B,MAAM,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAEzC,cAAc,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QACvC,GAAG,EAAE,CAAC;IACR,CAAC,CAAC,CAAC;IAEH,KAAK,MAAM,GAAG,IAAI,cAAc,CAAC,SAAS,EAAE,CAAC;QAC3C,MAAM,GAAG,EAAE,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,KAAK,EAAE,OAAsB,EAAgC,EAAE;IACpF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAQ,EAAE,GAAQ,EAAE,EAAE;YACzC,IAAI,GAAG,EAAE,CAAC;gBACR,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,CAAC;YACf,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,qEAAqE;AACrE,4DAA4D;AAC5D,MAAM,aAAa,GAAkB;IACnC,wBAAwB,EAAE;QACxB,IAAI,EAAE,SAAS;KAChB;CACF,CAAC;AAEF,MAAM,iBAAiB,GAAkB;IACvC,0BAA0B,EAAE;QAC1B,IAAI,EAAE,SAAS;KAChB;CACF,CAAC;AAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,EAAU,EAAiB,EAAE;IACnD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,OAAO,EAEL,QAAQ,EACR,aAAa,EACb,iBAAiB,EAEjB,cAAc,EACd,cAAc,EACd,aAAa,GACd,CAAC"}
|