@awesomeness-js/utils 1.0.24 → 1.1.2
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 +112 -86
- package/build/build.js +16 -11
- package/build/postBuild.js +8 -8
- package/eslint.config.js +90 -0
- package/index.js +108 -78
- package/package.json +26 -25
- package/schemas/schema1.js +5 -1
- package/schemas/schema2.js +5 -1
- package/schemas.js +3 -2
- package/src/build.js +88 -8
- package/src/clean/boolean.js +27 -17
- package/src/clean/integer.js +85 -69
- package/src/clean/number.js +103 -86
- package/src/clean/string.js +91 -67
- package/src/clean/timestamp.js +61 -45
- package/src/clean/uuid.js +38 -25
- package/src/collectImports.js +195 -0
- package/src/combineFiles.js +45 -36
- package/src/convertBytes.js +12 -7
- package/src/decrypt.js +17 -9
- package/src/each.js +26 -4
- package/src/eachAsync.js +35 -19
- package/src/encrypt.js +22 -17
- package/src/getAllFiles.js +56 -42
- package/src/ignoreFolder/ignoreMe.js +6 -2
- package/src/ignoreMe.js +4 -2
- package/src/isUUID.js +4 -0
- package/src/md5.js +5 -1
- package/src/password/check.js +7 -3
- package/src/password/hash.js +12 -7
- package/src/setLocalEnvs.js +16 -3
- package/src/shouldIgnore.js +99 -0
- package/src/thingType.js +62 -24
- package/src/toPennies.js +23 -5
- package/src/utils/buildExportsTree.js +45 -17
- package/src/utils/buildFileDataList.js +37 -18
- package/src/utils/clean.js +205 -120
- package/src/utils/extractJSDocComment.js +14 -7
- package/src/utils/generateFile.js +54 -18
- package/src/utils/generateFlatExportLines.js +40 -17
- package/src/utils/generateImportStatements.js +20 -8
- package/src/utils/generateNamedExports.js +55 -10
- package/src/utils/generateNamespaceCode.js +56 -24
- package/src/utils/generateNamespaceExportLines.js +27 -7
- package/src/utils/writeHotWrapper.js +42 -0
- package/src/uuid.js +9 -7
- package/src/validateSchema.js +95 -77
- package/test/collectImports.js +8 -0
- package/test/css/some.css +3 -0
- package/test/css/some.js +5 -0
- package/test/ignoreFolder/ignoreMe.js +3 -1
- package/test/ignoreFolder/ignoreMe2.js +3 -1
- package/test/ignoreFolder2/ignoreMe.js +6 -2
- package/test/js/abc.test.js +7 -3
- package/test/js/some.js +5 -0
- package/test/secret.test.js +1 -1
- package/tests/clean/array.test.js +122 -74
- package/tests/clean/boolean.test.js +18 -6
- package/tests/clean/integer.test.js +25 -9
- package/tests/clean/number.test.js +49 -13
- package/tests/clean/object.test.js +190 -119
- package/tests/clean/string.test.js +48 -17
- package/tests/clean/timestamp.test.js +12 -5
- package/tests/clean/uuid.test.js +13 -6
- package/tests/collectImports.test.js +66 -0
- package/tests/combineFiles.test.js +28 -26
- package/tests/convertBytes.test.js +8 -3
- package/tests/env.test.js +9 -3
- package/tests/example.test.js +7 -3
- package/tests/fileList.test.js +16 -12
- package/tests/hash-and-encrypt.test.js +13 -4
- package/tests/ignore.test.js +55 -0
- package/tests/md5.test.js +7 -2
- package/tests/namedExports.test.js +13 -0
- package/tests/uuid.test.js +10 -4
- package/tests/validateSchema.test.js +21 -9
- package/tsconfig.json +20 -16
- package/types/build.d.ts +5 -1
- package/types/collectImports.d.ts +6 -0
- package/types/index.d.ts +108 -78
- package/types/shouldIgnore.d.ts +1 -0
- package/types/utils/buildFileDataList.d.ts +5 -1
- package/types/utils/generateFile.d.ts +8 -1
- package/types/utils/generateFlatExportLines.d.ts +7 -1
- package/types/utils/generateImportStatements.d.ts +5 -1
- package/types/utils/generateNamedExports.d.ts +7 -1
- package/types/utils/generateNamespaceCode.d.ts +7 -1
- package/types/utils/generateNamespaceExportLines.d.ts +6 -1
- package/types/utils/writeHotWrapper.d.ts +4 -0
- package/src/utils/shouldIgnore.js +0 -43
|
@@ -1,9 +1,21 @@
|
|
|
1
|
-
export default function generateImportStatements(
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
export default function generateImportStatements({
|
|
2
|
+
fileDataList,
|
|
3
|
+
dts,
|
|
4
|
+
src
|
|
5
|
+
}) {
|
|
6
|
+
|
|
7
|
+
let statements = '';
|
|
8
|
+
|
|
9
|
+
fileDataList.forEach(({
|
|
10
|
+
importVarName, importPath
|
|
11
|
+
}) => {
|
|
12
|
+
|
|
13
|
+
statements += dts
|
|
14
|
+
? `import type ${importVarName} from '.${importPath.replace(src,'')}';\n`
|
|
15
|
+
: `import ${importVarName} from '${importPath}.js';\n`;
|
|
16
|
+
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
return statements;
|
|
20
|
+
|
|
9
21
|
}
|
|
@@ -1,11 +1,56 @@
|
|
|
1
|
-
export default function generateNamedExports(
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
export default function generateNamedExports({
|
|
2
|
+
flatExports,
|
|
3
|
+
exportRoots,
|
|
4
|
+
nestedExports,
|
|
5
|
+
dts,
|
|
6
|
+
useTabs = true
|
|
7
|
+
}) {
|
|
8
|
+
|
|
9
|
+
const indentStyle = useTabs ? '\t' : ' ';
|
|
10
|
+
let lines = '';
|
|
11
|
+
|
|
12
|
+
if (!exportRoots) return lines;
|
|
13
|
+
|
|
14
|
+
// existing flat exports
|
|
15
|
+
flatExports.forEach(({
|
|
16
|
+
functionName, importVarName
|
|
17
|
+
}) => {
|
|
18
|
+
|
|
19
|
+
lines += dts
|
|
20
|
+
? `export declare const ${functionName}: typeof ${importVarName};\n`
|
|
21
|
+
: `export { ${importVarName} as ${functionName} };\n`;
|
|
22
|
+
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
// grouped namespaces as named exports
|
|
26
|
+
if (nestedExports) {
|
|
27
|
+
|
|
28
|
+
lines += '\n';
|
|
29
|
+
|
|
30
|
+
for (const [ groupName, members ] of Object.entries(nestedExports)) {
|
|
31
|
+
|
|
32
|
+
if (dts) {
|
|
33
|
+
|
|
34
|
+
const fields = Object.entries(members)
|
|
35
|
+
.map(([ k, v ]) => `${indentStyle}${k}: typeof ${v.importVarName};`)
|
|
36
|
+
.join('\n');
|
|
37
|
+
|
|
38
|
+
lines += `export declare const ${groupName}: {\n${fields}\n};\n\n`;
|
|
39
|
+
|
|
40
|
+
} else {
|
|
41
|
+
|
|
42
|
+
const fields = Object.entries(members)
|
|
43
|
+
.map(([ k, v ]) => `${indentStyle}${k}: ${v.importVarName}`)
|
|
44
|
+
.join(',\n');
|
|
45
|
+
|
|
46
|
+
lines += `export const ${groupName} = {\n${fields}\n};\n\n`;
|
|
47
|
+
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
return lines;
|
|
55
|
+
|
|
11
56
|
}
|
|
@@ -1,25 +1,57 @@
|
|
|
1
|
-
export default function generateNamespaceCode(
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
1
|
+
export default function generateNamespaceCode({
|
|
2
|
+
nsObj,
|
|
3
|
+
indentLevel,
|
|
4
|
+
includeComments,
|
|
5
|
+
dts,
|
|
6
|
+
useTabs = true
|
|
7
|
+
}) {
|
|
8
|
+
|
|
9
|
+
let indentStyle = useTabs ? '\t' : ' ';
|
|
10
|
+
|
|
11
|
+
const indent = indentStyle.repeat(indentLevel);
|
|
12
|
+
let lines = [ '{' ];
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
for (const key in nsObj) {
|
|
16
|
+
|
|
17
|
+
const value = nsObj[key];
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
if (typeof value === 'object' && value.hasOwnProperty('importVarName')) {
|
|
21
|
+
|
|
22
|
+
if (includeComments && value.jsDocComment) {
|
|
23
|
+
|
|
24
|
+
const indentedComment = value.jsDocComment
|
|
25
|
+
.split('\n')
|
|
26
|
+
.map((line) => indent + indentStyle + line)
|
|
27
|
+
.join('\n');
|
|
28
|
+
|
|
29
|
+
lines.push(indentedComment);
|
|
30
|
+
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
lines.push(dts
|
|
34
|
+
? `${indent}${indentStyle}${key}: typeof ${value.importVarName},`
|
|
35
|
+
: `${indent}${indentStyle}${key}: ${value.importVarName},`
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
} else {
|
|
39
|
+
|
|
40
|
+
const nestedCode = generateNamespaceCode({
|
|
41
|
+
nsObj: value,
|
|
42
|
+
indentLevel: indentLevel + 1,
|
|
43
|
+
includeComments,
|
|
44
|
+
dts
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
lines.push(`${indent}${indentStyle}${key}: ${nestedCode},`);
|
|
48
|
+
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
lines.push(indent + '}');
|
|
54
|
+
|
|
55
|
+
return lines.join('\n');
|
|
56
|
+
|
|
25
57
|
}
|
|
@@ -1,10 +1,30 @@
|
|
|
1
1
|
import generateNamespaceCode from './generateNamespaceCode.js';
|
|
2
2
|
|
|
3
|
-
export default function generateNamespaceExportLines(
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
export default function generateNamespaceExportLines({
|
|
4
|
+
nestedExports,
|
|
5
|
+
includeComments,
|
|
6
|
+
dts,
|
|
7
|
+
useTabs = true
|
|
8
|
+
}) {
|
|
9
|
+
|
|
10
|
+
const indentStyle = useTabs ? '\t' : ' ';
|
|
11
|
+
|
|
12
|
+
let lines = '';
|
|
13
|
+
|
|
14
|
+
for (const ns in nestedExports) {
|
|
15
|
+
|
|
16
|
+
const nsCode = generateNamespaceCode({
|
|
17
|
+
nsObj: nestedExports[ns],
|
|
18
|
+
indentLevel: 1,
|
|
19
|
+
includeComments,
|
|
20
|
+
dts,
|
|
21
|
+
useTabs
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
lines += `${indentStyle}${ns}: ${nsCode},\n`;
|
|
25
|
+
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return lines;
|
|
29
|
+
|
|
10
30
|
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { writeFileSync } from 'node:fs';
|
|
2
|
+
|
|
3
|
+
export default function writeHotWrapper({
|
|
4
|
+
dest,
|
|
5
|
+
hotSource
|
|
6
|
+
}) {
|
|
7
|
+
|
|
8
|
+
const wrapper = `// auto-generated wrapper
|
|
9
|
+
import chokidar from 'chokidar';
|
|
10
|
+
import path from 'node:path';
|
|
11
|
+
import { pathToFileURL } from 'node:url';
|
|
12
|
+
|
|
13
|
+
let _default;
|
|
14
|
+
|
|
15
|
+
export { _default as default };
|
|
16
|
+
|
|
17
|
+
const target = path.resolve(${JSON.stringify(hotSource)});
|
|
18
|
+
|
|
19
|
+
async function reload() {
|
|
20
|
+
|
|
21
|
+
const mod = await import(\`\${pathToFileURL(target)}?t=\${Date.now()}\`);
|
|
22
|
+
|
|
23
|
+
_default = mod.default;
|
|
24
|
+
console.log('[hot] reloaded', target);
|
|
25
|
+
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
await reload();
|
|
29
|
+
|
|
30
|
+
let t;
|
|
31
|
+
|
|
32
|
+
chokidar.watch(target, { ignoreInitial: true }).on('all', () => {
|
|
33
|
+
|
|
34
|
+
clearTimeout(t);
|
|
35
|
+
t = setTimeout(() => reload().catch(err => console.error('[hot] failed:', err)), 50);
|
|
36
|
+
|
|
37
|
+
});
|
|
38
|
+
`;
|
|
39
|
+
|
|
40
|
+
writeFileSync(dest, wrapper);
|
|
41
|
+
|
|
42
|
+
}
|
package/src/uuid.js
CHANGED
|
@@ -2,15 +2,17 @@ import crypto from 'crypto';
|
|
|
2
2
|
|
|
3
3
|
// V4
|
|
4
4
|
function uuid() {
|
|
5
|
-
const arr = crypto.randomBytes(16);
|
|
6
5
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
const arr = crypto.randomBytes(16);
|
|
7
|
+
|
|
8
|
+
// Set the UUID version and clock sequence bits as per RFC4122
|
|
9
|
+
arr[6] = (arr[6] & 0x0f) | 0x40;
|
|
10
|
+
arr[8] = (arr[8] & 0x3f) | 0x80;
|
|
11
|
+
|
|
12
|
+
return [ ...arr ].map((b, i) =>
|
|
13
|
+
[ 4, 6, 8, 10 ].includes(i) ? '-' + b.toString(16).padStart(2, '0') : b.toString(16).padStart(2, '0')
|
|
14
|
+
).join('');
|
|
10
15
|
|
|
11
|
-
return [...arr].map((b, i) =>
|
|
12
|
-
[4, 6, 8, 10].includes(i) ? '-' + b.toString(16).padStart(2, '0') : b.toString(16).padStart(2, '0')
|
|
13
|
-
).join('');
|
|
14
16
|
}
|
|
15
17
|
|
|
16
18
|
export default uuid;
|
package/src/validateSchema.js
CHANGED
|
@@ -2,83 +2,101 @@ import each from './each.js';
|
|
|
2
2
|
|
|
3
3
|
function validateSchema(schema){
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
5
|
+
if(!schema){
|
|
6
|
+
|
|
7
|
+
throw {
|
|
8
|
+
message: 'Schema is required.',
|
|
9
|
+
schema
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
// ref todo
|
|
15
|
+
if(schema.ref){
|
|
16
|
+
|
|
17
|
+
return true;
|
|
18
|
+
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
let schemaType = typeof schema;
|
|
22
|
+
|
|
23
|
+
if(schemaType !== 'object' || schema === null) {
|
|
24
|
+
|
|
25
|
+
throw {
|
|
26
|
+
message: 'Schema Invalid - Input must be an object',
|
|
27
|
+
schema,
|
|
28
|
+
schemaType
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// object properties dont have type
|
|
34
|
+
if(!schema.type && schema.properties){
|
|
35
|
+
|
|
36
|
+
schema.type = 'object';
|
|
37
|
+
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const validTypes = [
|
|
41
|
+
'array',
|
|
42
|
+
'boolean',
|
|
43
|
+
'integer',
|
|
44
|
+
'number',
|
|
45
|
+
'object',
|
|
46
|
+
'string',
|
|
47
|
+
'timestamp',
|
|
48
|
+
'uuid'
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
if(!schema.type || !validTypes.includes(schema.type)) {
|
|
52
|
+
|
|
53
|
+
throw {
|
|
54
|
+
message: `Schema must have a valid type.`,
|
|
55
|
+
validTypes,
|
|
56
|
+
schema
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
if(schema.type === 'object') {
|
|
63
|
+
|
|
64
|
+
if(schema.properties){
|
|
65
|
+
|
|
66
|
+
// run through each property
|
|
67
|
+
each(schema.properties, (v,k) => {
|
|
68
|
+
|
|
69
|
+
validateSchema(v);
|
|
70
|
+
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
} else {
|
|
74
|
+
|
|
75
|
+
throw {
|
|
76
|
+
message: 'Object invalid - needs "properties"',
|
|
77
|
+
schema
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if(schema.type === 'array') {
|
|
85
|
+
|
|
86
|
+
if(!schema.items){
|
|
87
|
+
|
|
88
|
+
throw {
|
|
89
|
+
message: 'Array schema must have items defined.',
|
|
90
|
+
schema
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
validateSchema(schema.items);
|
|
96
|
+
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return true;
|
|
82
100
|
|
|
83
101
|
}
|
|
84
102
|
|
package/test/css/some.css
CHANGED
package/test/css/some.js
CHANGED
package/test/js/abc.test.js
CHANGED
package/test/js/some.js
CHANGED
package/test/secret.test.js
CHANGED