@leettools/common 0.1.0
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/LICENSE +201 -0
- package/README.md +16 -0
- package/dist/config.d.ts +8 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +59 -0
- package/dist/config.js.map +1 -0
- package/dist/content.d.ts +6 -0
- package/dist/content.d.ts.map +1 -0
- package/dist/content.js +33 -0
- package/dist/content.js.map +1 -0
- package/dist/csv.d.ts +10 -0
- package/dist/csv.d.ts.map +1 -0
- package/dist/csv.js +63 -0
- package/dist/csv.js.map +1 -0
- package/dist/deprecatied.d.ts +5 -0
- package/dist/deprecatied.d.ts.map +1 -0
- package/dist/deprecatied.js +18 -0
- package/dist/deprecatied.js.map +1 -0
- package/dist/errors.d.ts +106 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +196 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/json.d.ts +8 -0
- package/dist/json.d.ts.map +1 -0
- package/dist/json.js +46 -0
- package/dist/json.js.map +1 -0
- package/dist/language.d.ts +13 -0
- package/dist/language.d.ts.map +1 -0
- package/dist/language.js +89 -0
- package/dist/language.js.map +1 -0
- package/dist/node/dotenv_utils.d.ts +13 -0
- package/dist/node/dotenv_utils.d.ts.map +1 -0
- package/dist/node/dotenv_utils.js +82 -0
- package/dist/node/dotenv_utils.js.map +1 -0
- package/dist/node/file_utils.d.ts +30 -0
- package/dist/node/file_utils.d.ts.map +1 -0
- package/dist/node/file_utils.js +211 -0
- package/dist/node/file_utils.js.map +1 -0
- package/dist/node/module_utils.d.ts +2 -0
- package/dist/node/module_utils.d.ts.map +1 -0
- package/dist/node/module_utils.js +30 -0
- package/dist/node/module_utils.js.map +1 -0
- package/dist/registry.d.ts +11 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +48 -0
- package/dist/registry.js.map +1 -0
- package/dist/template.d.ts +5 -0
- package/dist/template.d.ts.map +1 -0
- package/dist/template.js +62 -0
- package/dist/template.js.map +1 -0
- package/dist/time.d.ts +7 -0
- package/dist/time.d.ts.map +1 -0
- package/dist/time.js +47 -0
- package/dist/time.js.map +1 -0
- package/dist/tokenizer.d.ts +3 -0
- package/dist/tokenizer.d.ts.map +1 -0
- package/dist/tokenizer.js +26 -0
- package/dist/tokenizer.js.map +1 -0
- package/dist/types.d.ts +17 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +128 -0
- package/dist/types.js.map +1 -0
- package/dist/url.d.ts +6 -0
- package/dist/url.d.ts.map +1 -0
- package/dist/url.js +48 -0
- package/dist/url.js.map +1 -0
- package/package.json +89 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { existsSync, lstatSync, readFileSync, readdirSync, readlinkSync, rmSync, symlinkSync, writeFileSync, } from 'node:fs';
|
|
3
|
+
import { mkdtempSync } from 'node:fs';
|
|
4
|
+
import { tmpdir } from 'node:os';
|
|
5
|
+
import { basename, extname, join, resolve } from 'node:path';
|
|
6
|
+
import { fileURLToPath } from 'node:url';
|
|
7
|
+
import { CopyFileError, UnexpectedCaseError, UnexpectedIOError } from '../errors.js';
|
|
8
|
+
const REPLACEMENTS = {
|
|
9
|
+
'#': '_',
|
|
10
|
+
$: '_',
|
|
11
|
+
'&': 'and',
|
|
12
|
+
"'": '',
|
|
13
|
+
'(': '',
|
|
14
|
+
')': '',
|
|
15
|
+
'*': '_',
|
|
16
|
+
'+': '_',
|
|
17
|
+
',': '_',
|
|
18
|
+
'/': '_',
|
|
19
|
+
':': '_',
|
|
20
|
+
';': '_',
|
|
21
|
+
'=': '_',
|
|
22
|
+
'?': '_',
|
|
23
|
+
'@': '_',
|
|
24
|
+
'[': '',
|
|
25
|
+
']': '',
|
|
26
|
+
'"': '',
|
|
27
|
+
'<': '_',
|
|
28
|
+
'>': '_',
|
|
29
|
+
'\\': '_',
|
|
30
|
+
'^': '_',
|
|
31
|
+
'{': '',
|
|
32
|
+
'|': '_',
|
|
33
|
+
'}': '',
|
|
34
|
+
'~': '_',
|
|
35
|
+
'`': '_',
|
|
36
|
+
};
|
|
37
|
+
export function createSymlink(srcFilename, destFilename) {
|
|
38
|
+
if (!existsSync(srcFilename)) {
|
|
39
|
+
throw new CopyFileError(`creating a symlink from ${srcFilename} to ${destFilename}. The source file does not exist.`);
|
|
40
|
+
}
|
|
41
|
+
if (existsSync(destFilename) || isSymlink(destFilename)) {
|
|
42
|
+
if (isSymlink(destFilename)) {
|
|
43
|
+
rmSync(destFilename);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
throw new CopyFileError(`creating a symlink from ${srcFilename} to ${destFilename}. The destination file already exists and is not a symlink.`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
symlinkSync(srcFilename, destFilename);
|
|
50
|
+
}
|
|
51
|
+
export function redactApiKey(apiKey) {
|
|
52
|
+
const asterisks = '******';
|
|
53
|
+
if (!apiKey) {
|
|
54
|
+
return '';
|
|
55
|
+
}
|
|
56
|
+
if (apiKey.length <= 6) {
|
|
57
|
+
return `${apiKey[0]}${asterisks}`;
|
|
58
|
+
}
|
|
59
|
+
if (apiKey.length < 12) {
|
|
60
|
+
return `${apiKey.slice(0, 3)}${asterisks}${apiKey.slice(-3)}`;
|
|
61
|
+
}
|
|
62
|
+
return `${apiKey.slice(0, 5)}${asterisks}${apiKey.slice(-5)}`;
|
|
63
|
+
}
|
|
64
|
+
export function isValidFilename(filename) {
|
|
65
|
+
let directory = null;
|
|
66
|
+
try {
|
|
67
|
+
directory = mkdtempSync(join(tmpdir(), 'leettools-filename-'));
|
|
68
|
+
const filePath = join(directory, filename);
|
|
69
|
+
writeFileSync(filePath, 'test', 'utf-8');
|
|
70
|
+
return readFileSync(filePath, 'utf-8') === 'test';
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
finally {
|
|
76
|
+
if (directory !== null) {
|
|
77
|
+
rmSync(directory, { recursive: true, force: true });
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
export function parseUriForSearchParams(uri) {
|
|
82
|
+
const parsed = new URL(uri);
|
|
83
|
+
if (parsed.protocol !== 'search:') {
|
|
84
|
+
throw new UnexpectedCaseError(`Unsupported URI scheme: ${parsed.protocol.replace(/:$/, '')}`);
|
|
85
|
+
}
|
|
86
|
+
const params = {
|
|
87
|
+
provider: parsed.hostname,
|
|
88
|
+
q: null,
|
|
89
|
+
date_range: null,
|
|
90
|
+
max_results: null,
|
|
91
|
+
ts: null,
|
|
92
|
+
};
|
|
93
|
+
for (const [key, value] of parsed.searchParams.entries()) {
|
|
94
|
+
params[key] = value;
|
|
95
|
+
}
|
|
96
|
+
return params;
|
|
97
|
+
}
|
|
98
|
+
export function fileHashAndSize(filePath) {
|
|
99
|
+
try {
|
|
100
|
+
const fileContent = readFileSync(filePath);
|
|
101
|
+
return [createHash('sha256').update(fileContent).digest('hex'), fileContent.length];
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
throw new UnexpectedIOError(`hashing the file ${filePath}`, error);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
export function getAbsolutePath(path) {
|
|
108
|
+
return resolve(path);
|
|
109
|
+
}
|
|
110
|
+
export function readableTimestamp(date = new Date()) {
|
|
111
|
+
return `${padYear(date)}-${pad2(date.getMonth() + 1)}-${pad2(date.getDate())} ${pad2(date.getHours())}:${pad2(date.getMinutes())}:${pad2(date.getSeconds())}`;
|
|
112
|
+
}
|
|
113
|
+
export function filenameTimestamp(date = new Date()) {
|
|
114
|
+
return `${padYear(date)}-${pad2(date.getMonth() + 1)}-${pad2(date.getDate())}-${pad2(date.getHours())}-${pad2(date.getMinutes())}-${pad2(date.getSeconds())}-${pad6(date.getMilliseconds() * 1000)}`;
|
|
115
|
+
}
|
|
116
|
+
export function filenameTimestampToDatetime(timestamp) {
|
|
117
|
+
const match = /^(\d{4})-(\d{2})-(\d{2})-(\d{2})-(\d{2})-(\d{2})-(\d{6})$/.exec(timestamp);
|
|
118
|
+
if (!match) {
|
|
119
|
+
throw new UnexpectedCaseError(`Invalid filename timestamp: ${timestamp}`);
|
|
120
|
+
}
|
|
121
|
+
return new Date(Number(match[1]), Number(match[2]) - 1, Number(match[3]), Number(match[4]), Number(match[5]), Number(match[6]), Math.floor(Number(match[7]) / 1000));
|
|
122
|
+
}
|
|
123
|
+
export function getFilesWithTimestamp(directory, prefix, suffix) {
|
|
124
|
+
const timestampPattern = '(\\d{4}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-\\d{2}-\\d{6})';
|
|
125
|
+
const pattern = new RegExp(`^${escapeRegExp(`${prefix}.`)}${timestampPattern}${escapeRegExp(`.${suffix}`)}$`);
|
|
126
|
+
return readdirSync(directory)
|
|
127
|
+
.map((filename) => {
|
|
128
|
+
const match = pattern.exec(filename);
|
|
129
|
+
return match
|
|
130
|
+
? { filename, timestamp: filenameTimestampToDatetime(match[1]) }
|
|
131
|
+
: null;
|
|
132
|
+
})
|
|
133
|
+
.filter((item) => item !== null)
|
|
134
|
+
.sort((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
|
|
135
|
+
}
|
|
136
|
+
export function readTemplateFile(filePath) {
|
|
137
|
+
return readFileSync(filePath, 'utf-8')
|
|
138
|
+
.split(/\r?\n/)
|
|
139
|
+
.map((line) => line.trim())
|
|
140
|
+
.filter((line) => line.length > 0 && !line.startsWith('#'))
|
|
141
|
+
.join('\n');
|
|
142
|
+
}
|
|
143
|
+
export function uriToPath(uri) {
|
|
144
|
+
if (/^[a-zA-Z]:[\\/]/.test(uri)) {
|
|
145
|
+
return uri;
|
|
146
|
+
}
|
|
147
|
+
const parsed = new URL(uri, 'file:');
|
|
148
|
+
if (parsed.protocol === 'file:') {
|
|
149
|
+
return fileURLToPath(parsed);
|
|
150
|
+
}
|
|
151
|
+
return decodeURIComponent(parsed.pathname);
|
|
152
|
+
}
|
|
153
|
+
export function extractFilenameFromUri(uri) {
|
|
154
|
+
const parsed = new URL(uri);
|
|
155
|
+
let name = basename(parsed.pathname);
|
|
156
|
+
if (name.length > 128) {
|
|
157
|
+
name = name.slice(0, 128);
|
|
158
|
+
}
|
|
159
|
+
if (uri.endsWith('/') || name === '') {
|
|
160
|
+
name = 'index';
|
|
161
|
+
}
|
|
162
|
+
return sanitizeFileName(name);
|
|
163
|
+
}
|
|
164
|
+
export function extractFileSuffixFromUrl(uri) {
|
|
165
|
+
const parsed = new URL(uri);
|
|
166
|
+
const name = basename(parsed.pathname);
|
|
167
|
+
if (uri.endsWith('/') || name === '') {
|
|
168
|
+
return 'html';
|
|
169
|
+
}
|
|
170
|
+
return extname(parsed.pathname).replace(/^\./, '');
|
|
171
|
+
}
|
|
172
|
+
export function sanitizeFileName(fileName) {
|
|
173
|
+
let sanitized = decodeURIComponent(fileName).replaceAll(' ', '_');
|
|
174
|
+
for (const [char, replacement] of Object.entries(REPLACEMENTS)) {
|
|
175
|
+
sanitized = sanitized.replaceAll(char, replacement);
|
|
176
|
+
}
|
|
177
|
+
return Array.from(sanitized)
|
|
178
|
+
.filter((char) => (char.codePointAt(0) ?? 0) < 128)
|
|
179
|
+
.join('');
|
|
180
|
+
}
|
|
181
|
+
export function getBaseDomain(url) {
|
|
182
|
+
const domain = new URL(url).host;
|
|
183
|
+
const parts = domain.split('.');
|
|
184
|
+
return parts.length >= 2 ? parts.slice(-2).join('.') : domain;
|
|
185
|
+
}
|
|
186
|
+
export function isSubdomainOrSame(baseUrl, checkUrl) {
|
|
187
|
+
return getBaseDomain(baseUrl) === getBaseDomain(checkUrl);
|
|
188
|
+
}
|
|
189
|
+
function isSymlink(path) {
|
|
190
|
+
try {
|
|
191
|
+
lstatSync(path);
|
|
192
|
+
readlinkSync(path);
|
|
193
|
+
return true;
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
return false;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
function padYear(date) {
|
|
200
|
+
return date.getFullYear().toString().padStart(4, '0');
|
|
201
|
+
}
|
|
202
|
+
function pad2(value) {
|
|
203
|
+
return value.toString().padStart(2, '0');
|
|
204
|
+
}
|
|
205
|
+
function pad6(value) {
|
|
206
|
+
return value.toString().padStart(6, '0');
|
|
207
|
+
}
|
|
208
|
+
function escapeRegExp(value) {
|
|
209
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
210
|
+
}
|
|
211
|
+
//# sourceMappingURL=file_utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file_utils.js","sourceRoot":"","sources":["../../src/node/file_utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module_utils.d.ts","sourceRoot":"","sources":["../../src/node/module_utils.ts"],"names":[],"mappings":"AAKA,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAqBjF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { relative, resolve, sep } from 'node:path';
|
|
2
|
+
import { statSync } from 'node:fs';
|
|
3
|
+
import { ParametersValidationError } from '../errors.js';
|
|
4
|
+
export function generatePackageName(basePath, packagePath) {
|
|
5
|
+
const basePathResolved = resolve(basePath);
|
|
6
|
+
const packagePathResolved = resolve(packagePath);
|
|
7
|
+
const relativePath = relative(basePathResolved, packagePathResolved);
|
|
8
|
+
if (relativePath === '' ||
|
|
9
|
+
relativePath.startsWith(`..${sep}`) ||
|
|
10
|
+
relativePath === '..' ||
|
|
11
|
+
/^[a-zA-Z]:/.test(relativePath)) {
|
|
12
|
+
throw new ParametersValidationError([
|
|
13
|
+
`Module path ${packagePathResolved} must be under base project path ${basePathResolved}`,
|
|
14
|
+
]);
|
|
15
|
+
}
|
|
16
|
+
const parts = relativePath.split(sep);
|
|
17
|
+
if (pathIsFile(packagePathResolved)) {
|
|
18
|
+
parts[parts.length - 1] = parts[parts.length - 1].replace(/\.[^.]*$/, '');
|
|
19
|
+
}
|
|
20
|
+
return parts.join('.');
|
|
21
|
+
}
|
|
22
|
+
function pathIsFile(path) {
|
|
23
|
+
try {
|
|
24
|
+
return statSync(path).isFile();
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=module_utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"module_utils.js","sourceRoot":"","sources":["../../src/node/module_utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAElC,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAA;AAExD,MAAM,UAAU,mBAAmB,CAAC,QAAgB,EAAE,WAAmB;IACvE,MAAM,gBAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;IAC1C,MAAM,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAA;IAChD,MAAM,YAAY,GAAG,QAAQ,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAA;IAEpE,IACE,YAAY,KAAK,EAAE;QACnB,YAAY,CAAC,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC;QACnC,YAAY,KAAK,IAAI;QACrB,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,EAC/B,CAAC;QACD,MAAM,IAAI,yBAAyB,CAAC;YAClC,eAAe,mBAAmB,oCAAoC,gBAAgB,EAAE;SACzF,CAAC,CAAA;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IACrC,IAAI,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACpC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAA;IAC3E,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACxB,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAA;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type Constructor<T> = new (...args: unknown[]) => T;
|
|
2
|
+
export type ModuleExports = Record<string, unknown>;
|
|
3
|
+
export declare function getSubclassFromModule<T>(moduleExports: ModuleExports, baseClass: Constructor<T>): Constructor<T>[];
|
|
4
|
+
export declare function createObject<T>(moduleSpecifier: string, baseClass: Constructor<T>, ...args: unknown[]): Promise<T>;
|
|
5
|
+
export interface CreateManagerWithRepoTypeOptions {
|
|
6
|
+
env?: Record<string, string | undefined>;
|
|
7
|
+
envVarPrefix?: string;
|
|
8
|
+
baseModuleName?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function createManagerWithRepoType<T>(managerName: string, repoType: string, baseClass: Constructor<T>, args?: unknown[], options?: CreateManagerWithRepoTypeOptions): Promise<T>;
|
|
11
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;AAC1D,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEnD,wBAAgB,qBAAqB,CAAC,CAAC,EACrC,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,GACxB,WAAW,CAAC,CAAC,CAAC,EAAE,CAWlB;AAED,wBAAsB,YAAY,CAAC,CAAC,EAClC,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,EACzB,GAAG,IAAI,EAAE,OAAO,EAAE,GACjB,OAAO,CAAC,CAAC,CAAC,CAyBZ;AAED,MAAM,WAAW,gCAAgC;IAC/C,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IACxC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,wBAAsB,yBAAyB,CAAC,CAAC,EAC/C,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,EACzB,IAAI,GAAE,OAAO,EAAO,EACpB,OAAO,GAAE,gCAAqC,GAC7C,OAAO,CAAC,CAAC,CAAC,CAaZ"}
|
package/dist/registry.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { EntityNotFoundError, InvalidValueError, UnexpectedCaseError, } from './errors.js';
|
|
2
|
+
export function getSubclassFromModule(moduleExports, baseClass) {
|
|
3
|
+
if (typeof baseClass !== 'function') {
|
|
4
|
+
throw new InvalidValueError('baseClass', 'constructor', typeof baseClass);
|
|
5
|
+
}
|
|
6
|
+
return Object.values(moduleExports).filter((value) => typeof value === 'function' &&
|
|
7
|
+
value !== baseClass &&
|
|
8
|
+
value.prototype instanceof baseClass);
|
|
9
|
+
}
|
|
10
|
+
export async function createObject(moduleSpecifier, baseClass, ...args) {
|
|
11
|
+
let moduleExports;
|
|
12
|
+
try {
|
|
13
|
+
moduleExports = (await import(moduleSpecifier));
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
if (isModuleNotFound(error)) {
|
|
17
|
+
throw new EntityNotFoundError(moduleSpecifier, 'module');
|
|
18
|
+
}
|
|
19
|
+
throw error;
|
|
20
|
+
}
|
|
21
|
+
const subclasses = getSubclassFromModule(moduleExports, baseClass);
|
|
22
|
+
if (subclasses.length === 0) {
|
|
23
|
+
throw new UnexpectedCaseError(`No subclasses of ${baseClass.name} found in the module ${moduleSpecifier}`);
|
|
24
|
+
}
|
|
25
|
+
if (subclasses.length > 1) {
|
|
26
|
+
throw new UnexpectedCaseError(`More than one subclass of ${baseClass.name} found in the module ${moduleSpecifier}: ${subclasses
|
|
27
|
+
.map((cls) => cls.name)
|
|
28
|
+
.join(', ')}`);
|
|
29
|
+
}
|
|
30
|
+
return new subclasses[0](...args);
|
|
31
|
+
}
|
|
32
|
+
export async function createManagerWithRepoType(managerName, repoType, baseClass, args = [], options = {}) {
|
|
33
|
+
const env = options.env ?? process.env;
|
|
34
|
+
const envVarPrefix = options.envVarPrefix ?? 'EDS_';
|
|
35
|
+
const overrideModuleName = env[`${envVarPrefix}${managerName.toUpperCase()}`];
|
|
36
|
+
const moduleName = overrideModuleName && overrideModuleName.length > 0
|
|
37
|
+
? overrideModuleName
|
|
38
|
+
: `${managerName}_${repoType}`;
|
|
39
|
+
const fullModuleName = moduleName.includes('.')
|
|
40
|
+
? moduleName
|
|
41
|
+
: `${options.baseModuleName ?? ''}${options.baseModuleName ? '/' : ''}_impl/${repoType}/${moduleName}`;
|
|
42
|
+
return createObject(fullModuleName, baseClass, ...args);
|
|
43
|
+
}
|
|
44
|
+
function isModuleNotFound(error) {
|
|
45
|
+
return (error instanceof Error &&
|
|
46
|
+
('code' in error ? error.code === 'ERR_MODULE_NOT_FOUND' : /Cannot find module/.test(error.message)));
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type TemplateVariables = Record<string, unknown>;
|
|
2
|
+
export declare function renderTemplate(template: string, variables: TemplateVariables, allowPartial?: boolean): string;
|
|
3
|
+
export declare function findTemplateVariables(template: string): Set<string>;
|
|
4
|
+
export declare function findLocalVariables(template: string): Set<string>;
|
|
5
|
+
//# sourceMappingURL=template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEvD,wBAAgB,cAAc,CAC5B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,iBAAiB,EAC5B,YAAY,UAAQ,GACnB,MAAM,CAgBR;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAcnE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAMhE"}
|
package/dist/template.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { MissingParametersError } from './errors.js';
|
|
2
|
+
export function renderTemplate(template, variables, allowPartial = false) {
|
|
3
|
+
let normalized = template;
|
|
4
|
+
if (template.includes('{{{{')) {
|
|
5
|
+
normalized = formatEscapedTemplate(template, variables, allowPartial);
|
|
6
|
+
}
|
|
7
|
+
return normalized.replace(/{{\s*([a-zA-Z_][a-zA-Z0-9_.]*)\s*}}/g, (match, name) => {
|
|
8
|
+
const value = lookupVariable(variables, name);
|
|
9
|
+
if (value === undefined) {
|
|
10
|
+
if (allowPartial) {
|
|
11
|
+
return `{{ ${name} }}`;
|
|
12
|
+
}
|
|
13
|
+
throw new MissingParametersError(`Error: Undefined variable. ${name}`);
|
|
14
|
+
}
|
|
15
|
+
return String(value);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
export function findTemplateVariables(template) {
|
|
19
|
+
let normalized = template;
|
|
20
|
+
if (template.includes('{{{{')) {
|
|
21
|
+
const replacements = Object.fromEntries(Array.from(findLocalVariables(template), (variable) => [variable, 'test_placeholder']));
|
|
22
|
+
normalized = formatEscapedTemplate(template, replacements, true);
|
|
23
|
+
}
|
|
24
|
+
const variables = new Set();
|
|
25
|
+
for (const match of normalized.matchAll(/{{\s*([a-zA-Z_][a-zA-Z0-9_.]*)\s*}}/g)) {
|
|
26
|
+
variables.add(match[1]);
|
|
27
|
+
}
|
|
28
|
+
return variables;
|
|
29
|
+
}
|
|
30
|
+
export function findLocalVariables(template) {
|
|
31
|
+
const variables = new Set();
|
|
32
|
+
for (const match of template.matchAll(/(?<!{){([a-zA-Z_][a-zA-Z0-9_]*)}(?!})/g)) {
|
|
33
|
+
variables.add(match[1]);
|
|
34
|
+
}
|
|
35
|
+
return variables;
|
|
36
|
+
}
|
|
37
|
+
function replaceLocalVariables(template, variables, allowPartial) {
|
|
38
|
+
return template.replace(/(?<!{){([a-zA-Z_][a-zA-Z0-9_]*)}(?!})/g, (match, name) => {
|
|
39
|
+
const value = variables[name];
|
|
40
|
+
if (value === undefined) {
|
|
41
|
+
if (allowPartial) {
|
|
42
|
+
return match;
|
|
43
|
+
}
|
|
44
|
+
throw new MissingParametersError(`Error: Undefined variable. ${name}`);
|
|
45
|
+
}
|
|
46
|
+
return String(value);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
function formatEscapedTemplate(template, variables, allowPartial) {
|
|
50
|
+
return replaceLocalVariables(template, variables, allowPartial)
|
|
51
|
+
.replaceAll('{{{{', '{{')
|
|
52
|
+
.replaceAll('}}}}', '}}');
|
|
53
|
+
}
|
|
54
|
+
function lookupVariable(variables, path) {
|
|
55
|
+
return path.split('.').reduce((current, key) => {
|
|
56
|
+
if (current && typeof current === 'object' && key in current) {
|
|
57
|
+
return current[key];
|
|
58
|
+
}
|
|
59
|
+
return undefined;
|
|
60
|
+
}, variables);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../src/template.ts"],"names":[],"mappings":"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"}
|
package/dist/time.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function parseDate(value: string): Date | null;
|
|
2
|
+
export declare function currentTimestampMs(): number;
|
|
3
|
+
export declare function dateFromTimestampMs(timestamp?: number): Date;
|
|
4
|
+
export declare function enforceTimezone(date: Date): Date;
|
|
5
|
+
export declare function nowMinusDays(days: number): Date;
|
|
6
|
+
export declare function randomString(length?: number): string;
|
|
7
|
+
//# sourceMappingURL=time.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.d.ts","sourceRoot":"","sources":["../src/time.ts"],"names":[],"mappings":"AAKA,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAYpD;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,mBAAmB,CAAC,SAAS,SAAa,GAAG,IAAI,CAEhE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAUhD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED,wBAAgB,YAAY,CAAC,MAAM,SAAI,GAAG,MAAM,CAQ/C"}
|
package/dist/time.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const DATE_ONLY_PATTERNS = [
|
|
2
|
+
/^(\d{4})[-/](\d{1,2})[-/](\d{1,2})$/,
|
|
3
|
+
/^(\d{1,2})[-/](\d{1,2})[-/](\d{4})$/,
|
|
4
|
+
];
|
|
5
|
+
export function parseDate(value) {
|
|
6
|
+
const normalized = value.trim();
|
|
7
|
+
const yearFirst = DATE_ONLY_PATTERNS[0].exec(normalized);
|
|
8
|
+
if (yearFirst) {
|
|
9
|
+
return validLocalDate(Number(yearFirst[1]), Number(yearFirst[2]), Number(yearFirst[3]));
|
|
10
|
+
}
|
|
11
|
+
const monthFirst = DATE_ONLY_PATTERNS[1].exec(normalized);
|
|
12
|
+
if (monthFirst) {
|
|
13
|
+
return validLocalDate(Number(monthFirst[3]), Number(monthFirst[1]), Number(monthFirst[2]));
|
|
14
|
+
}
|
|
15
|
+
const timestamp = Date.parse(normalized);
|
|
16
|
+
return Number.isNaN(timestamp) ? null : new Date(timestamp);
|
|
17
|
+
}
|
|
18
|
+
export function currentTimestampMs() {
|
|
19
|
+
return Date.now();
|
|
20
|
+
}
|
|
21
|
+
export function dateFromTimestampMs(timestamp = Date.now()) {
|
|
22
|
+
return new Date(timestamp);
|
|
23
|
+
}
|
|
24
|
+
export function enforceTimezone(date) {
|
|
25
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());
|
|
26
|
+
}
|
|
27
|
+
export function nowMinusDays(days) {
|
|
28
|
+
const result = new Date();
|
|
29
|
+
result.setDate(result.getDate() - days);
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
export function randomString(length = 8) {
|
|
33
|
+
if (!Number.isInteger(length) || length < 0) {
|
|
34
|
+
throw new RangeError('length must be a non-negative integer');
|
|
35
|
+
}
|
|
36
|
+
const alphabet = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
|
37
|
+
const bytes = new Uint8Array(length);
|
|
38
|
+
crypto.getRandomValues(bytes);
|
|
39
|
+
return Array.from(bytes, (byte) => alphabet[byte % alphabet.length]).join('');
|
|
40
|
+
}
|
|
41
|
+
function validLocalDate(year, month, day) {
|
|
42
|
+
const date = new Date(year, month - 1, day);
|
|
43
|
+
return date.getFullYear() === year && date.getMonth() === month - 1 && date.getDate() === day
|
|
44
|
+
? date
|
|
45
|
+
: null;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=time.js.map
|
package/dist/time.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"time.js","sourceRoot":"","sources":["../src/time.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenizer.d.ts","sourceRoot":"","sources":["../src/tokenizer.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBxE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,SAAgB,GAAG,MAAM,CAG7E"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { UnexpectedCaseError } from './errors.js';
|
|
2
|
+
import { tokenPerCharRatio } from './language.js';
|
|
3
|
+
export function simpleSplitText(text, numParts) {
|
|
4
|
+
const words = text.trim().length > 0 ? text.trim().split(/\s+/) : [];
|
|
5
|
+
if (numParts > words.length) {
|
|
6
|
+
throw new UnexpectedCaseError(`Number of parts exceeds the number of words in the text: ${numParts} > ${words.length}.\n${text}\n`);
|
|
7
|
+
}
|
|
8
|
+
if (!Number.isInteger(numParts) || numParts <= 0) {
|
|
9
|
+
throw new RangeError('numParts must be a positive integer');
|
|
10
|
+
}
|
|
11
|
+
const partSize = Math.floor(words.length / numParts);
|
|
12
|
+
const largerParts = words.length % numParts;
|
|
13
|
+
const parts = [];
|
|
14
|
+
let index = 0;
|
|
15
|
+
for (let i = 0; i < numParts; i += 1) {
|
|
16
|
+
const currentPartSize = partSize + (i < largerParts ? 1 : 0);
|
|
17
|
+
parts.push(words.slice(index, index + currentPartSize).join(' '));
|
|
18
|
+
index += currentPartSize;
|
|
19
|
+
}
|
|
20
|
+
return parts;
|
|
21
|
+
}
|
|
22
|
+
export function estTokenCount(text, modelName = 'gpt-4o-mini') {
|
|
23
|
+
void modelName;
|
|
24
|
+
return Math.ceil(text.length * tokenPerCharRatio(text));
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=tokenizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenizer.js","sourceRoot":"","sources":["../src/tokenizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAEjD,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,QAAgB;IAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACpE,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;QAC5B,MAAM,IAAI,mBAAmB,CAC3B,4DAA4D,QAAQ,MAAM,KAAK,CAAC,MAAM,MAAM,IAAI,IAAI,CACrG,CAAA;IACH,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,UAAU,CAAC,qCAAqC,CAAC,CAAA;IAC7D,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAA;IACpD,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAA;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,eAAe,GAAG,QAAQ,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC5D,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QACjE,KAAK,IAAI,eAAe,CAAA;IAC1B,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,SAAS,GAAG,aAAa;IACnE,KAAK,SAAS,CAAA;IACd,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAA;AACzD,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type JsonPrimitive = string | number | boolean | null;
|
|
2
|
+
export type JsonValue = JsonPrimitive | JsonObject | JsonValue[];
|
|
3
|
+
export type JsonObject = {
|
|
4
|
+
[key: string]: JsonValue;
|
|
5
|
+
};
|
|
6
|
+
export type QueryValue = string | number | boolean | readonly (string | number | boolean)[] | null | undefined;
|
|
7
|
+
export type QueryParams = Record<string, QueryValue>;
|
|
8
|
+
export declare const FIELD_NAME_PREFIX = "FIELD_";
|
|
9
|
+
export declare const ENV_VAR_PREFIX = "EDS_";
|
|
10
|
+
export declare function isJsonObject(value: unknown): value is JsonObject;
|
|
11
|
+
export declare function isStringArray(value: unknown): value is string[];
|
|
12
|
+
export declare function addEnvVarConstants<T extends Record<string, unknown>>(target: T, fieldNames?: Iterable<string>): T;
|
|
13
|
+
export declare function addFieldnameConstants<T extends Record<string, unknown>>(target: T, fieldNames?: Iterable<string>): T;
|
|
14
|
+
export declare function setFieldFromString(target: Record<string, unknown>, fieldName: string, value: string, fieldType?: 'string' | 'number' | 'boolean' | 'null'): void;
|
|
15
|
+
export declare function isSubclassSafe(value: unknown, base: unknown): boolean;
|
|
16
|
+
export declare function assignProperties(source: Record<string, unknown>, destination: Record<string, unknown>, override?: boolean): void;
|
|
17
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;AAE5D,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,EAAE,CAAA;AAEhE,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAA;AAErD,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,MAAM,GACN,OAAO,GACP,SAAS,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,EAAE,GACtC,IAAI,GACJ,SAAS,CAAA;AAEb,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;AAEpD,eAAO,MAAM,iBAAiB,WAAW,CAAA;AACzC,eAAO,MAAM,cAAc,SAAS,CAAA;AAEpC,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAEhE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,EAAE,CAE/D;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClE,MAAM,EAAE,CAAC,EACT,UAAU,GAAE,QAAQ,CAAC,MAAM,CAA2B,GACrD,CAAC,CASH;AAED,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrE,MAAM,EAAE,CAAC,EACT,UAAU,GAAE,QAAQ,CAAC,MAAM,CAA2B,GACrD,CAAC,CAKH;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAA0C,GACtF,IAAI,CAwBN;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAWrE;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACpC,QAAQ,UAAQ,GACf,IAAI,CA6BN"}
|