@wener/common 1.0.2 → 1.0.4
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/lib/cn/DivisionCode.js +311 -0
- package/lib/cn/DivisionCode.js.map +1 -0
- package/lib/cn/Mod11Checksum.js +42 -0
- package/lib/cn/Mod11Checksum.js.map +1 -0
- package/lib/cn/Mod31Checksum.js +48 -0
- package/lib/cn/Mod31Checksum.js.map +1 -0
- package/lib/cn/ResidentIdentityCardNumber.js +50 -0
- package/lib/cn/ResidentIdentityCardNumber.js.map +1 -0
- package/lib/cn/UnifiedSocialCreditCode.js +118 -0
- package/lib/cn/UnifiedSocialCreditCode.js.map +1 -0
- package/lib/cn/formatDate.js +15 -0
- package/lib/cn/formatDate.js.map +1 -0
- package/lib/cn/index.js +4 -0
- package/lib/cn/index.js.map +1 -0
- package/lib/cn/parseSex.js +22 -0
- package/lib/cn/parseSex.js.map +1 -0
- package/lib/cn/types.d.js +8 -0
- package/lib/cn/types.d.js.map +1 -0
- package/lib/data/formatSort.js +15 -0
- package/lib/data/formatSort.js.map +1 -0
- package/lib/data/index.js +4 -0
- package/lib/data/index.js.map +1 -0
- package/lib/data/maybeNumber.js +22 -0
- package/lib/data/maybeNumber.js.map +1 -0
- package/lib/data/parseSort.js +95 -0
- package/lib/data/parseSort.js.map +1 -0
- package/lib/data/resolvePagination.js +36 -0
- package/lib/data/resolvePagination.js.map +1 -0
- package/lib/data/types.d.js +3 -0
- package/lib/data/types.d.js.map +1 -0
- package/lib/index.js +6 -2
- package/lib/index.js.map +1 -1
- package/lib/jsonschema/JsonSchema.js +4 -4
- package/lib/jsonschema/JsonSchema.js.map +1 -1
- package/lib/jsonschema/types.d.js.map +1 -1
- package/lib/meta/defineFileType.js +44 -0
- package/lib/meta/defineFileType.js.map +1 -0
- package/lib/meta/defineInit.js.map +1 -1
- package/lib/meta/defineMetadata.js +14 -3
- package/lib/meta/defineMetadata.js.map +1 -1
- package/lib/meta/index.js +1 -0
- package/lib/meta/index.js.map +1 -1
- package/lib/password/PHC.js +8 -8
- package/lib/password/PHC.js.map +1 -1
- package/lib/password/Password.js.map +1 -1
- package/lib/password/createArgon2PasswordAlgorithm.js.map +1 -1
- package/lib/password/createBase64PasswordAlgorithm.js.map +1 -1
- package/lib/password/createBcryptPasswordAlgorithm.js.map +1 -1
- package/lib/password/createPBKDF2PasswordAlgorithm.js.map +1 -1
- package/lib/password/createScryptPasswordAlgorithm.js.map +1 -1
- package/lib/search/AdvanceSearch.js.map +1 -1
- package/lib/search/formatAdvanceSearch.js +1 -1
- package/lib/search/formatAdvanceSearch.js.map +1 -1
- package/lib/search/optimizeAdvanceSearch.js.map +1 -1
- package/lib/search/parseAdvanceSearch.js.map +1 -1
- package/lib/search/parser.d.js.map +1 -1
- package/lib/search/parser.js +380 -76
- package/lib/search/parser.js.map +1 -1
- package/lib/search/types.d.js.map +1 -1
- package/lib/tools/renderJsonSchemaToMarkdownDoc.js.map +1 -1
- package/package.json +14 -5
- package/src/cn/DivisionCode.test.ts +43 -0
- package/src/cn/DivisionCode.ts +209 -0
- package/src/cn/Mod11Checksum.ts +24 -0
- package/src/cn/Mod31Checksum.ts +36 -0
- package/src/cn/ResidentIdentityCardNumber.test.ts +17 -0
- package/src/cn/ResidentIdentityCardNumber.ts +96 -0
- package/src/cn/UnifiedSocialCreditCode.test.ts +16 -0
- package/src/cn/UnifiedSocialCreditCode.ts +143 -0
- package/src/cn/__snapshots__/ResidentIdentityCardNumber.test.ts.snap +15 -0
- package/src/cn/__snapshots__/UnifiedSocialCreditCode.test.ts.snap +41 -0
- package/src/cn/formatDate.ts +12 -0
- package/src/cn/index.ts +3 -0
- package/src/cn/parseSex.ts +13 -0
- package/src/cn/types.d.ts +51 -0
- package/src/data/formatSort.test.ts +13 -0
- package/src/data/formatSort.ts +18 -0
- package/src/data/index.ts +5 -0
- package/src/data/maybeNumber.ts +23 -0
- package/src/data/parseSort.test.ts +67 -0
- package/src/data/parseSort.ts +108 -0
- package/src/data/resolvePagination.test.ts +58 -0
- package/src/data/resolvePagination.ts +60 -0
- package/src/data/types.d.ts +33 -0
- package/src/index.ts +8 -2
- package/src/jsonschema/JsonSchema.test.ts +13 -22
- package/src/jsonschema/JsonSchema.ts +145 -177
- package/src/jsonschema/types.d.ts +151 -161
- package/src/meta/defineFileType.tsx +68 -0
- package/src/meta/defineInit.ts +32 -53
- package/src/meta/defineMetadata.test.ts +5 -7
- package/src/meta/defineMetadata.ts +35 -40
- package/src/meta/index.ts +2 -0
- package/src/password/PHC.test.ts +186 -277
- package/src/password/PHC.ts +243 -243
- package/src/password/Password.test.ts +38 -50
- package/src/password/Password.ts +73 -95
- package/src/password/createArgon2PasswordAlgorithm.ts +65 -69
- package/src/password/createBase64PasswordAlgorithm.ts +9 -9
- package/src/password/createBcryptPasswordAlgorithm.ts +20 -22
- package/src/password/createPBKDF2PasswordAlgorithm.ts +49 -61
- package/src/password/createScryptPasswordAlgorithm.ts +48 -59
- package/src/search/AdvanceSearch.test.ts +136 -143
- package/src/search/AdvanceSearch.ts +6 -6
- package/src/search/__snapshots__/AdvanceSearch.test.ts.snap +3 -3
- package/src/search/formatAdvanceSearch.ts +44 -53
- package/src/search/optimizeAdvanceSearch.ts +70 -83
- package/src/search/parseAdvanceSearch.ts +16 -19
- package/src/search/parser.d.ts +3 -3
- package/src/search/parser.js +325 -73
- package/src/search/parser.peggy +42 -9
- package/src/search/types.d.ts +28 -54
- package/src/tools/renderJsonSchemaToMarkdownDoc.ts +69 -69
- package/lib/normalizePagination.js +0 -14
- package/lib/normalizePagination.js.map +0 -1
- package/lib/parseSort.js +0 -91
- package/lib/parseSort.js.map +0 -1
- package/src/normalizePagination.ts +0 -25
- package/src/parseSort.test.ts +0 -42
- package/src/parseSort.ts +0 -115
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export function parseSex(s) {
|
|
2
|
+
if (!s) return undefined;
|
|
3
|
+
switch(s.toLowerCase()){
|
|
4
|
+
case '男':
|
|
5
|
+
case 'male':
|
|
6
|
+
return {
|
|
7
|
+
sex: 'Male',
|
|
8
|
+
male: true,
|
|
9
|
+
female: false
|
|
10
|
+
};
|
|
11
|
+
case '女':
|
|
12
|
+
case 'female':
|
|
13
|
+
return {
|
|
14
|
+
sex: 'Female',
|
|
15
|
+
male: false,
|
|
16
|
+
female: true
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
return undefined;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=parseSex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cn/parseSex.ts"],"sourcesContent":["export function parseSex(s: string): undefined | { sex: 'Male' | 'Female'; male: boolean; female: boolean } {\n\tif (!s) return undefined;\n\n\tswitch (s.toLowerCase()) {\n\t\tcase '男':\n\t\tcase 'male':\n\t\t\treturn { sex: 'Male', male: true, female: false };\n\t\tcase '女':\n\t\tcase 'female':\n\t\t\treturn { sex: 'Female', male: false, female: true };\n\t}\n\treturn undefined;\n}\n"],"names":["parseSex","s","undefined","toLowerCase","sex","male","female"],"mappings":"AAAA,OAAO,SAASA,SAASC,CAAS;IACjC,IAAI,CAACA,GAAG,OAAOC;IAEf,OAAQD,EAAEE,WAAW;QACpB,KAAK;QACL,KAAK;YACJ,OAAO;gBAAEC,KAAK;gBAAQC,MAAM;gBAAMC,QAAQ;YAAM;QACjD,KAAK;QACL,KAAK;YACJ,OAAO;gBAAEF,KAAK;gBAAUC,MAAM;gBAAOC,QAAQ;YAAK;IACpD;IACA,OAAOJ;AACR"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/cn/types.d.ts"],"sourcesContent":["/**\n * 居民身份证\n *\n * @see https://en.wikipedia.org/wiki/Resident_Identity_Card\n * @see https://en.wikipedia.org/wiki/Foreign_Permanent_Resident_ID_Card\n */\nexport interface ResidentIdentityCardInfo {\n\t/**\n\t * @title 姓名\n\t */\n\tname: string;\n\t/**\n\t * @title 性别\n\t */\n\tsex: 'Male' | 'Female';\n\t/**\n\t * @title 民族\n\t * 例如 '汉'/'满'/'回'\n\t */\n\tethnicity: string;\n\t/**\n\t * @title 出生日期\n\t * @format date\n\t */\n\tbirthDate: string;\n\t/**\n\t * @title 地址\n\t *\n\t * - 通常为 domicile/户籍地\n\t */\n\taddress: string;\n\t/**\n\t * @title 身份证号\n\t */\n\tidentityCardNumber: string;\n\t/**\n\t * @title 签发机关\n\t */\n\tissuer: string;\n\t/**\n\t * @title 有效期开始日期\n\t * @format date\n\t */\n\tvalidStartDate: string;\n\t/**\n\t * @title 有效期结束日期\n\t * @format date\n\t * @description 如长期有效则为 空\n\t */\n\tvalidEndDate?: string;\n}\n"],"names":[],"mappings":"AAAA;;;;;CAKC,GACD,WA4CC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export function formatSort(s) {
|
|
2
|
+
return s.map(({ field, order, nulls })=>{
|
|
3
|
+
if (!field) return '';
|
|
4
|
+
let r = field;
|
|
5
|
+
if (order) {
|
|
6
|
+
r += ` ${order}`;
|
|
7
|
+
}
|
|
8
|
+
if (nulls) {
|
|
9
|
+
r += ` nulls ${nulls}`;
|
|
10
|
+
}
|
|
11
|
+
return r;
|
|
12
|
+
}).filter(Boolean);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=formatSort.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/data/formatSort.ts"],"sourcesContent":["import type { SortRule } from './parseSort';\n\nexport function formatSort(s: SortRule[]): string[] {\n\treturn s\n\t\t.map(({ field, order, nulls }) => {\n\t\t\tif (!field) return '';\n\n\t\t\tlet r = field;\n\t\t\tif (order) {\n\t\t\t\tr += ` ${order}`;\n\t\t\t}\n\t\t\tif (nulls) {\n\t\t\t\tr += ` nulls ${nulls}`;\n\t\t\t}\n\t\t\treturn r;\n\t\t})\n\t\t.filter(Boolean);\n}\n"],"names":["formatSort","s","map","field","order","nulls","r","filter","Boolean"],"mappings":"AAEA,OAAO,SAASA,WAAWC,CAAa;IACvC,OAAOA,EACLC,GAAG,CAAC,CAAC,EAAEC,KAAK,EAAEC,KAAK,EAAEC,KAAK,EAAE;QAC5B,IAAI,CAACF,OAAO,OAAO;QAEnB,IAAIG,IAAIH;QACR,IAAIC,OAAO;YACVE,KAAK,CAAC,CAAC,EAAEF,OAAO;QACjB;QACA,IAAIC,OAAO;YACVC,KAAK,CAAC,OAAO,EAAED,OAAO;QACvB;QACA,OAAOC;IACR,GACCC,MAAM,CAACC;AACV"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/data/index.ts"],"sourcesContent":["export type * from './types';\n\nexport { resolvePagination, type PaginationInput, type ResolvedPagination } from './resolvePagination';\nexport { parseSort, type SortRule } from './parseSort';\nexport { formatSort } from './formatSort';\n"],"names":["resolvePagination","parseSort","formatSort"],"mappings":"AAEA,SAASA,iBAAiB,QAAuD,sBAAsB;AACvG,SAASC,SAAS,QAAuB,cAAc;AACvD,SAASC,UAAU,QAAQ,eAAe"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export function maybeNumber(v) {
|
|
2
|
+
if (v === null || v === undefined) {
|
|
3
|
+
return undefined;
|
|
4
|
+
}
|
|
5
|
+
switch(typeof v){
|
|
6
|
+
case 'number':
|
|
7
|
+
return v;
|
|
8
|
+
case 'bigint':
|
|
9
|
+
return Number(v);
|
|
10
|
+
case 'string':
|
|
11
|
+
if (v === '') {
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
const n = Number(v);
|
|
16
|
+
if (isNaN(n)) {
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
return n;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=maybeNumber.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/data/maybeNumber.ts"],"sourcesContent":["export type MaybeNumber = number | null | string | undefined | bigint;\n\nexport function maybeNumber(v: MaybeNumber) {\n\tif (v === null || v === undefined) {\n\t\treturn undefined;\n\t}\n\n\tswitch (typeof v) {\n\t\tcase 'number':\n\t\t\treturn v;\n\t\tcase 'bigint':\n\t\t\treturn Number(v);\n\t\tcase 'string':\n\t\t\tif (v === '') {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t}\n\tconst n = Number(v);\n\tif (isNaN(n)) {\n\t\treturn undefined;\n\t}\n\treturn n;\n}\n"],"names":["maybeNumber","v","undefined","Number","n","isNaN"],"mappings":"AAEA,OAAO,SAASA,YAAYC,CAAc;IACzC,IAAIA,MAAM,QAAQA,MAAMC,WAAW;QAClC,OAAOA;IACR;IAEA,OAAQ,OAAOD;QACd,KAAK;YACJ,OAAOA;QACR,KAAK;YACJ,OAAOE,OAAOF;QACf,KAAK;YACJ,IAAIA,MAAM,IAAI;gBACb,OAAOC;YACR;IACF;IACA,MAAME,IAAID,OAAOF;IACjB,IAAII,MAAMD,IAAI;QACb,OAAOF;IACR;IACA,OAAOE;AACR"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { arrayOfMaybeArray } from "@wener/utils";
|
|
2
|
+
/**
|
|
3
|
+
* Parses various format of sort specifications into standardized SortRule objects
|
|
4
|
+
*
|
|
5
|
+
* Supported formats:
|
|
6
|
+
* - "field asc|desc"
|
|
7
|
+
* - "field asc|desc nulls first|last"
|
|
8
|
+
* - "+field" for ascending, "-field" for descending
|
|
9
|
+
* - Object notation: { field: string, order?: string, nulls?: string }
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* parseSort('name desc') // [{ field: 'name', order: 'desc' }]
|
|
13
|
+
* parseSort('+name,-age') // [{ field: 'name', order: 'asc' }, { field: 'age', order: 'desc' }]
|
|
14
|
+
* parseSort('name asc nulls last') // [{ field: 'name', order: 'asc', nulls: 'last' }]
|
|
15
|
+
* parseSort([{ field: 'name' }]) // [{ field: 'name', order: 'asc' }]
|
|
16
|
+
*/ export function parseSort(order) {
|
|
17
|
+
if (!order) {
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
return arrayOfMaybeArray(order).flatMap((v)=>{
|
|
21
|
+
if (!v) return [];
|
|
22
|
+
if (typeof v === 'object') {
|
|
23
|
+
if (!v.field) {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
const rule = {
|
|
27
|
+
field: v.field,
|
|
28
|
+
order: normalizeOrder(v.order)
|
|
29
|
+
};
|
|
30
|
+
if (v.nulls) {
|
|
31
|
+
rule.nulls = normalizeNulls(v.nulls);
|
|
32
|
+
}
|
|
33
|
+
return rule;
|
|
34
|
+
}
|
|
35
|
+
return v.split(',').map((v)=>v.trim()).filter(Boolean).map(_parse);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Normalizes order values to 'asc' or 'desc'
|
|
40
|
+
*/ function normalizeOrder(order) {
|
|
41
|
+
return order?.toLowerCase() === 'asc' ? 'asc' : 'desc';
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Normalizes nulls values to 'last' or 'first'
|
|
45
|
+
*/ function normalizeNulls(nulls) {
|
|
46
|
+
return nulls?.toLowerCase() === 'last' ? 'last' : 'first';
|
|
47
|
+
}
|
|
48
|
+
function _parse(v) {
|
|
49
|
+
const sp = v.split(/\s+/);
|
|
50
|
+
let field = '';
|
|
51
|
+
let order;
|
|
52
|
+
let nulls;
|
|
53
|
+
// Handle first token which should be the field name (possibly with +/- prefix)
|
|
54
|
+
const f = sp.shift();
|
|
55
|
+
if (!f) return {
|
|
56
|
+
field: '',
|
|
57
|
+
order: 'asc'
|
|
58
|
+
}; // Defensive programming
|
|
59
|
+
if (f.startsWith('-') || f.startsWith('+')) {
|
|
60
|
+
field = f.slice(1).trim();
|
|
61
|
+
order = f.startsWith('-') ? 'desc' : 'asc';
|
|
62
|
+
} else {
|
|
63
|
+
field = f.trim();
|
|
64
|
+
}
|
|
65
|
+
// Process remaining tokens
|
|
66
|
+
while(sp.length > 0){
|
|
67
|
+
const token = sp.shift()?.trim()?.toLowerCase();
|
|
68
|
+
if (!token) continue;
|
|
69
|
+
switch(token){
|
|
70
|
+
case 'asc':
|
|
71
|
+
case 'desc':
|
|
72
|
+
order = token;
|
|
73
|
+
break;
|
|
74
|
+
case 'nulls':
|
|
75
|
+
nulls = sp.shift()?.trim()?.toLowerCase() === 'last' ? 'last' : 'first';
|
|
76
|
+
break;
|
|
77
|
+
case 'last':
|
|
78
|
+
case 'first':
|
|
79
|
+
nulls = token;
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
order ||= 'asc';
|
|
84
|
+
// Only include nulls if specified
|
|
85
|
+
return nulls ? {
|
|
86
|
+
field,
|
|
87
|
+
order,
|
|
88
|
+
nulls
|
|
89
|
+
} : {
|
|
90
|
+
field,
|
|
91
|
+
order
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
//# sourceMappingURL=parseSort.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/data/parseSort.ts"],"sourcesContent":["import { arrayOfMaybeArray, type MaybeArray } from '@wener/utils';\n\nexport type SortRule = { field: string; order: 'asc' | 'desc'; nulls?: 'last' | 'first' };\n\n/**\n * Parses various format of sort specifications into standardized SortRule objects\n *\n * Supported formats:\n * - \"field asc|desc\"\n * - \"field asc|desc nulls first|last\"\n * - \"+field\" for ascending, \"-field\" for descending\n * - Object notation: { field: string, order?: string, nulls?: string }\n *\n * @example\n * parseSort('name desc') // [{ field: 'name', order: 'desc' }]\n * parseSort('+name,-age') // [{ field: 'name', order: 'asc' }, { field: 'age', order: 'desc' }]\n * parseSort('name asc nulls last') // [{ field: 'name', order: 'asc', nulls: 'last' }]\n * parseSort([{ field: 'name' }]) // [{ field: 'name', order: 'asc' }]\n */\nexport function parseSort(\n\torder: MaybeArray<{ field?: string; order?: string; nulls?: string } | string> | undefined | null,\n): SortRule[] {\n\tif (!order) {\n\t\treturn [];\n\t}\n\n\treturn arrayOfMaybeArray(order).flatMap((v): MaybeArray<SortRule> => {\n\t\tif (!v) return [];\n\t\tif (typeof v === 'object') {\n\t\t\tif (!v.field) {\n\t\t\t\treturn [];\n\t\t\t}\n\t\t\tconst rule: SortRule = {\n\t\t\t\tfield: v.field,\n\t\t\t\torder: normalizeOrder(v.order),\n\t\t\t};\n\n\t\t\tif (v.nulls) {\n\t\t\t\trule.nulls = normalizeNulls(v.nulls);\n\t\t\t}\n\t\t\treturn rule;\n\t\t}\n\t\treturn v\n\t\t\t.split(',')\n\t\t\t.map((v) => v.trim())\n\t\t\t.filter(Boolean)\n\t\t\t.map(_parse);\n\t});\n}\n\n/**\n * Normalizes order values to 'asc' or 'desc'\n */\nfunction normalizeOrder(order?: string): SortRule['order'] {\n\treturn order?.toLowerCase() === 'asc' ? 'asc' : 'desc';\n}\n\n/**\n * Normalizes nulls values to 'last' or 'first'\n */\nfunction normalizeNulls(nulls?: string): SortRule['nulls'] {\n\treturn nulls?.toLowerCase() === 'last' ? 'last' : 'first';\n}\n\nfunction _parse(v: string): SortRule {\n\tconst sp = v.split(/\\s+/);\n\tlet field = '';\n\tlet order: SortRule['order'];\n\tlet nulls: SortRule['nulls'];\n\n\t// Handle first token which should be the field name (possibly with +/- prefix)\n\tconst f = sp.shift();\n\tif (!f) return { field: '', order: 'asc' }; // Defensive programming\n\n\tif (f.startsWith('-') || f.startsWith('+')) {\n\t\tfield = f.slice(1).trim();\n\t\torder = f.startsWith('-') ? 'desc' : 'asc';\n\t} else {\n\t\tfield = f.trim();\n\t}\n\n\t// Process remaining tokens\n\twhile (sp.length > 0) {\n\t\tconst token = sp.shift()?.trim()?.toLowerCase();\n\t\tif (!token) continue;\n\n\t\tswitch (token) {\n\t\t\tcase 'asc':\n\t\t\tcase 'desc':\n\t\t\t\torder = token;\n\t\t\t\tbreak;\n\n\t\t\tcase 'nulls':\n\t\t\t\tnulls = sp.shift()?.trim()?.toLowerCase() === 'last' ? 'last' : 'first';\n\t\t\t\tbreak;\n\n\t\t\tcase 'last':\n\t\t\tcase 'first':\n\t\t\t\tnulls = token;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\torder ||= 'asc';\n\n\t// Only include nulls if specified\n\treturn nulls ? { field, order, nulls } : { field, order };\n}\n"],"names":["arrayOfMaybeArray","parseSort","order","flatMap","v","field","rule","normalizeOrder","nulls","normalizeNulls","split","map","trim","filter","Boolean","_parse","toLowerCase","sp","f","shift","startsWith","slice","length","token"],"mappings":"AAAA,SAASA,iBAAiB,QAAyB,eAAe;AAIlE;;;;;;;;;;;;;;CAcC,GACD,OAAO,SAASC,UACfC,KAAiG;IAEjG,IAAI,CAACA,OAAO;QACX,OAAO,EAAE;IACV;IAEA,OAAOF,kBAAkBE,OAAOC,OAAO,CAAC,CAACC;QACxC,IAAI,CAACA,GAAG,OAAO,EAAE;QACjB,IAAI,OAAOA,MAAM,UAAU;YAC1B,IAAI,CAACA,EAAEC,KAAK,EAAE;gBACb,OAAO,EAAE;YACV;YACA,MAAMC,OAAiB;gBACtBD,OAAOD,EAAEC,KAAK;gBACdH,OAAOK,eAAeH,EAAEF,KAAK;YAC9B;YAEA,IAAIE,EAAEI,KAAK,EAAE;gBACZF,KAAKE,KAAK,GAAGC,eAAeL,EAAEI,KAAK;YACpC;YACA,OAAOF;QACR;QACA,OAAOF,EACLM,KAAK,CAAC,KACNC,GAAG,CAAC,CAACP,IAAMA,EAAEQ,IAAI,IACjBC,MAAM,CAACC,SACPH,GAAG,CAACI;IACP;AACD;AAEA;;CAEC,GACD,SAASR,eAAeL,KAAc;IACrC,OAAOA,OAAOc,kBAAkB,QAAQ,QAAQ;AACjD;AAEA;;CAEC,GACD,SAASP,eAAeD,KAAc;IACrC,OAAOA,OAAOQ,kBAAkB,SAAS,SAAS;AACnD;AAEA,SAASD,OAAOX,CAAS;IACxB,MAAMa,KAAKb,EAAEM,KAAK,CAAC;IACnB,IAAIL,QAAQ;IACZ,IAAIH;IACJ,IAAIM;IAEJ,+EAA+E;IAC/E,MAAMU,IAAID,GAAGE,KAAK;IAClB,IAAI,CAACD,GAAG,OAAO;QAAEb,OAAO;QAAIH,OAAO;IAAM,GAAG,wBAAwB;IAEpE,IAAIgB,EAAEE,UAAU,CAAC,QAAQF,EAAEE,UAAU,CAAC,MAAM;QAC3Cf,QAAQa,EAAEG,KAAK,CAAC,GAAGT,IAAI;QACvBV,QAAQgB,EAAEE,UAAU,CAAC,OAAO,SAAS;IACtC,OAAO;QACNf,QAAQa,EAAEN,IAAI;IACf;IAEA,2BAA2B;IAC3B,MAAOK,GAAGK,MAAM,GAAG,EAAG;QACrB,MAAMC,QAAQN,GAAGE,KAAK,IAAIP,QAAQI;QAClC,IAAI,CAACO,OAAO;QAEZ,OAAQA;YACP,KAAK;YACL,KAAK;gBACJrB,QAAQqB;gBACR;YAED,KAAK;gBACJf,QAAQS,GAAGE,KAAK,IAAIP,QAAQI,kBAAkB,SAAS,SAAS;gBAChE;YAED,KAAK;YACL,KAAK;gBACJR,QAAQe;gBACR;QACF;IACD;IAEArB,UAAU;IAEV,kCAAkC;IAClC,OAAOM,QAAQ;QAAEH;QAAOH;QAAOM;IAAM,IAAI;QAAEH;QAAOH;IAAM;AACzD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { maybeFunction } from "@wener/utils";
|
|
2
|
+
import { clamp, mapValues, omitBy, pick } from "es-toolkit";
|
|
3
|
+
import { maybeNumber } from "./maybeNumber.js";
|
|
4
|
+
export function resolvePagination(page, options = {}) {
|
|
5
|
+
let out = omitBy(mapValues(//
|
|
6
|
+
pick(page, [
|
|
7
|
+
"limit",
|
|
8
|
+
"offset",
|
|
9
|
+
"pageSize",
|
|
10
|
+
"pageNumber",
|
|
11
|
+
"pageIndex"
|
|
12
|
+
]), // to Number
|
|
13
|
+
(v) => maybeNumber(v)), (v) => v === undefined || v === null);
|
|
14
|
+
let { pageSize } = out;
|
|
15
|
+
if (options.pageSize) {
|
|
16
|
+
pageSize = maybeFunction(options.pageSize, pageSize);
|
|
17
|
+
}
|
|
18
|
+
pageSize ??= 20;
|
|
19
|
+
pageSize = clamp(pageSize, 1, options.maxPageSize ?? 100);
|
|
20
|
+
let { pageNumber = 1, pageIndex, limit, offset } = out;
|
|
21
|
+
// page index over page number
|
|
22
|
+
pageNumber = Math.max(pageNumber, 1);
|
|
23
|
+
pageIndex = Math.max(pageIndex ?? pageNumber - 1, 0);
|
|
24
|
+
limit = Math.max(1, limit ?? pageSize);
|
|
25
|
+
offset = Math.max(0, offset ?? pageSize * pageIndex);
|
|
26
|
+
pageSize = limit;
|
|
27
|
+
pageIndex = Math.floor(offset / pageSize);
|
|
28
|
+
return {
|
|
29
|
+
limit,
|
|
30
|
+
offset,
|
|
31
|
+
pageSize,
|
|
32
|
+
pageNumber: pageIndex + 1,
|
|
33
|
+
pageIndex
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=resolvePagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/data/resolvePagination.ts"],"sourcesContent":["import { maybeFunction, type MaybeFunction } from '@wener/utils';\nimport { clamp, mapValues, omitBy, pick } from 'es-toolkit';\nimport { maybeNumber, type MaybeNumber } from './maybeNumber';\n\nexport type PaginationInput = {\n\tlimit?: MaybeNumber;\n\toffset?: MaybeNumber;\n\tpageSize?: MaybeNumber;\n\tpageNumber?: MaybeNumber;\n\tpageIndex?: MaybeNumber;\n};\n\nexport type ResolvedPagination = {\n\tlimit: number;\n\toffset: number;\n\tpageSize: number;\n\tpageNumber: number;\n\tpageIndex: number;\n};\n\nexport function resolvePagination(\n\tpage: PaginationInput,\n\toptions: {\n\t\tpageSize?: MaybeFunction<number, [number | undefined]>;\n\t\tmaxPageSize?: number;\n\t} = {},\n): ResolvedPagination {\n\tlet out = omitBy(\n\t\tmapValues(\n\t\t\t//\n\t\t\tpick(page, ['limit', 'offset', 'pageSize', 'pageNumber', 'pageIndex']),\n\t\t\t// to Number\n\t\t\t(v) => maybeNumber(v),\n\t\t),\n\t\t(v) => v === undefined || v === null,\n\t);\n\tlet { pageSize } = out;\n\tif (options.pageSize) {\n\t\tpageSize = maybeFunction(options.pageSize, pageSize);\n\t}\n\tpageSize ??= 20;\n\tpageSize = clamp(pageSize, 1, options.maxPageSize ?? 100);\n\n\tlet { pageNumber = 1, pageIndex, limit, offset } = out;\n\t// page index over page number\n\tpageNumber = Math.max(pageNumber, 1);\n\tpageIndex = Math.max(pageIndex ?? pageNumber - 1, 0);\n\tlimit = Math.max(1, limit ?? pageSize);\n\toffset = Math.max(0, offset ?? pageSize * pageIndex);\n\n\tpageSize = limit;\n\tpageIndex = Math.floor(offset / pageSize);\n\treturn {\n\t\tlimit,\n\t\toffset,\n\t\tpageSize,\n\t\tpageNumber: pageIndex + 1,\n\t\tpageIndex,\n\t};\n}\n"],"names":["maybeFunction","clamp","mapValues","omitBy","pick","maybeNumber","resolvePagination","page","options","out","v","undefined","pageSize","maxPageSize","pageNumber","pageIndex","limit","offset","Math","max","floor"],"mappings":"AAAA,SAASA,aAAa,QAA4B,eAAe;AACjE,SAASC,KAAK,EAAEC,SAAS,EAAEC,MAAM,EAAEC,IAAI,QAAQ,aAAa;AAC5D,SAASC,WAAW,QAA0B,gBAAgB;AAkB9D,OAAO,SAASC,kBACfC,IAAqB,EACrBC,UAGI,CAAC,CAAC;IAEN,IAAIC,MAAMN,OACTD,UACC,EAAE;IACFE,KAAKG,MAAM;QAAC;QAAS;QAAU;QAAY;QAAc;KAAY,GACrE,YAAY;IACZ,CAACG,IAAML,YAAYK,KAEpB,CAACA,IAAMA,MAAMC,aAAaD,MAAM;IAEjC,IAAI,EAAEE,QAAQ,EAAE,GAAGH;IACnB,IAAID,QAAQI,QAAQ,EAAE;QACrBA,WAAWZ,cAAcQ,QAAQI,QAAQ,EAAEA;IAC5C;IACAA,aAAa;IACbA,WAAWX,MAAMW,UAAU,GAAGJ,QAAQK,WAAW,IAAI;IAErD,IAAI,EAAEC,aAAa,CAAC,EAAEC,SAAS,EAAEC,KAAK,EAAEC,MAAM,EAAE,GAAGR;IACnD,8BAA8B;IAC9BK,aAAaI,KAAKC,GAAG,CAACL,YAAY;IAClCC,YAAYG,KAAKC,GAAG,CAACJ,aAAaD,aAAa,GAAG;IAClDE,QAAQE,KAAKC,GAAG,CAAC,GAAGH,SAASJ;IAC7BK,SAASC,KAAKC,GAAG,CAAC,GAAGF,UAAUL,WAAWG;IAE1CH,WAAWI;IACXD,YAAYG,KAAKE,KAAK,CAACH,SAASL;IAChC,OAAO;QACNI;QACAC;QACAL;QACAE,YAAYC,YAAY;QACxBA;IACD;AACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/data/types.d.ts"],"sourcesContent":["export type ListQueryInput = {\n\t/** Filter string */\n\tfilter?: string;\n\t/** Filter array */\n\tfilters?: string[];\n\t/** Filter by IDs */\n\tids?: string[];\n\t/** Search query */\n\tsearch?: string;\n\t/** Items per page */\n\tlimit?: number;\n\t/** Offset for pagination */\n\toffset?: number;\n\t/** Ordering criteria */\n\torder?: string[];\n\t/** Page index (0-based) */\n\tpageIndex?: number;\n\t/** Page number (1-based) */\n\tpageNumber?: number;\n\t/** Items per page */\n\tpageSize?: number;\n\t/** Cursor for pagination */\n\tcursor?: string;\n\t/** Whether to include deleted items */\n\tdeleted?: boolean;\n};\n\ntype ListResult<T = any> = {\n\t/** List of items */\n\tdata: T[];\n\t/** Total number of items */\n\ttotal: number;\n};\n"],"names":[],"mappings":"AAAA,WAyBE"}
|
package/lib/index.js
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated
|
|
3
|
+
*/ export { parseSort } from "./data/parseSort.js";
|
|
4
|
+
/**
|
|
5
|
+
* @deprecated
|
|
6
|
+
*/ export { resolvePagination as normalizePagination } from "./data/resolvePagination.js";
|
|
3
7
|
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * @deprecated\n */\nexport { parseSort, type SortRule } from './data/parseSort';\n/**\n * @deprecated\n */\nexport { resolvePagination as normalizePagination } from './data/resolvePagination';\n"],"names":["parseSort","resolvePagination","normalizePagination"],"mappings":"AAAA;;CAEC,GACD,SAASA,SAAS,QAAuB,mBAAmB;AAC5D;;CAEC,GACD,SAASC,qBAAqBC,mBAAmB,QAAQ,2BAA2B"}
|
|
@@ -77,8 +77,8 @@ function validate({ schema, data, mutate, clone, ajv }) {
|
|
|
77
77
|
});
|
|
78
78
|
}
|
|
79
79
|
/**
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
* Check data is valid, will not use default
|
|
81
|
+
*/ JsonSchema.check = check;
|
|
82
82
|
function safeParse(schema, data) {
|
|
83
83
|
return validate({
|
|
84
84
|
schema,
|
|
@@ -88,8 +88,8 @@ function validate({ schema, data, mutate, clone, ajv }) {
|
|
|
88
88
|
});
|
|
89
89
|
}
|
|
90
90
|
/**
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
* Parse data with default value and coerceTypes
|
|
92
|
+
*/ JsonSchema.safeParse = safeParse;
|
|
93
93
|
function parse(schema, data) {
|
|
94
94
|
const { data: out, message, errors } = validate({
|
|
95
95
|
schema,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/jsonschema/JsonSchema.ts"],"sourcesContent":["import type { Static, TSchema } from '@sinclair/typebox';\nimport Ajv, { type ErrorObject, type Options } from 'ajv';\nimport addFormats from 'ajv-formats';\nimport localize from 'ajv-i18n/localize/zh';\nimport addKeywords from 'ajv-keywords';\nimport { isNil } from 'es-toolkit';\nimport { match, P } from 'ts-pattern';\nimport type { JsonSchemaDef } from './types';\n\nfunction _createAjv(opt: Options) {\n
|
|
1
|
+
{"version":3,"sources":["../../src/jsonschema/JsonSchema.ts"],"sourcesContent":["import type { Static, TSchema } from '@sinclair/typebox';\nimport Ajv, { type ErrorObject, type Options } from 'ajv';\nimport addFormats from 'ajv-formats';\nimport localize from 'ajv-i18n/localize/zh';\nimport addKeywords from 'ajv-keywords';\nimport { isNil } from 'es-toolkit';\nimport { match, P } from 'ts-pattern';\nimport type { JsonSchemaDef } from './types';\n\nfunction _createAjv(opt: Options) {\n\tconst ajv = new Ajv(opt);\n\taddKeywords(ajv);\n\taddFormats(ajv);\n\treturn ajv;\n}\n\ntype ValidateOptions = { mutate?: boolean; clone?: boolean; ajv?: Ajv };\n\ntype ValidateResult<T> =\n\t| { data: T; success: true; message: undefined }\n\t| { data: undefined; success: false; message: string; errors: ErrorObject[] };\n\nfunction validate({ schema, data, mutate, clone, ajv }: ValidateOptions & { schema: any; data: any }) {\n\tlet opts: Options = {\n\t\t// strict: 'log',\n\t\tstrict: true,\n\t\tstrictSchema: 'log', // skip unknown keywords in schema\n\t};\n\n\tif (mutate) {\n\t\tObject.assign(opts, { removeAdditional: true, useDefaults: true, coerceTypes: true, allErrors: true });\n\t}\n\n\tif (clone) {\n\t\tdata = structuredClone(data);\n\t}\n\n\tif (!ajv) {\n\t\tajv = JsonSchema.createAjv(opts);\n\t}\n\n\tconst validate = ajv.compile(schema);\n\n\t// consider reusing validate instance\n\n\tconst valid = validate(data);\n\tconst errors = validate.errors;\n\tlocalize(errors);\n\n\treturn { data, success: valid, message: ajv.errorsText(errors), errors: errors };\n}\n\ntype TypeOfSchema<S> = S extends TSchema ? Static<S> : any;\n\nexport namespace JsonSchema {\n\texport let schemas: JsonSchemaDef[] = [];\n\n\texport const createAjv = _createAjv;\n\n\texport function addSchema(\n\t\tschema: JsonSchemaDef,\n\t\t{\n\t\t\tonConflict = 'throw',\n\t\t}: {\n\t\t\tonConflict?: 'throw' | 'ignore' | 'replace' | ((old: JsonSchemaDef, neo: JsonSchemaDef) => JsonSchemaDef);\n\t\t} = {},\n\t) {\n\t\tif (!schema.$id) throw new Error('Schema must have $id');\n\t\tswitch (onConflict) {\n\t\t\tcase 'ignore':\n\t\t\t\tonConflict = (old) => old;\n\t\t\t\tbreak;\n\t\t\tcase 'replace':\n\t\t\t\tonConflict = (_, neo) => neo;\n\t\t\t\tbreak;\n\t\t\tcase 'throw':\n\t\t\t\tonConflict = (old, neo) => {\n\t\t\t\t\tthrow new Error(`Schema ${neo.$id} already exists`);\n\t\t\t\t};\n\t\t\t\tbreak;\n\t\t}\n\t\tlet idx = schemas.findIndex((s) => s.$id === schema.$id);\n\t\tif (idx >= 0) {\n\t\t\tschemas[idx] = onConflict(schemas[idx], schema);\n\t\t} else {\n\t\t\tschemas.push(schema);\n\t\t}\n\t}\n\n\t/**\n\t * Check data is valid, will not use default\n\t */\n\texport function check<S>(schema: S, data: any): ValidateResult<TypeOfSchema<S>> {\n\t\treturn validate({ schema, data, mutate: false, clone: true }) as any;\n\t}\n\n\t/**\n\t * Parse data with default value and coerceTypes\n\t */\n\texport function safeParse<S>(schema: S, data: any): ValidateResult<TypeOfSchema<S>> {\n\t\treturn validate({ schema, data, mutate: true, clone: true }) as any;\n\t}\n\n\texport function parse<S>(schema: S, data: any): TypeOfSchema<S> {\n\t\tconst { data: out, message, errors } = validate({ schema, data, mutate: true, clone: true });\n\t\tif (errors) {\n\t\t\tthrow new Error(message);\n\t\t}\n\t\treturn out;\n\t}\n\n\texport function create<S>(schema: S, data?: any): TypeOfSchema<S> {\n\t\t// will not ensure value match the rule\n\t\treturn match(schema as JsonSchemaDef)\n\t\t\t.returnType<any>()\n\t\t\t.with({ const: P.select() }, (v) => v)\n\t\t\t.with({ default: P.select() }, (v) => v)\n\t\t\t.with({ anyOf: P.nonNullable }, (schema) => {\n\t\t\t\treturn create(schema.anyOf[0]);\n\t\t\t})\n\t\t\t.with({ oneOf: P.nonNullable }, (schema) => {\n\t\t\t\treturn create(schema.oneOf[0]);\n\t\t\t})\n\t\t\t.with({ type: 'string' }, (schema) => '')\n\t\t\t.with({ type: P.union('number', 'integer') }, (schema) => 0)\n\t\t\t.with({ type: 'object' }, (schema) => {\n\t\t\t\tlet out = validate({ schema, data: data ?? {}, mutate: true });\n\t\t\t\tif (!out.success) {\n\t\t\t\t\t// fallback\n\t\t\t\t\tlet obj = data || {};\n\t\t\t\t\tschema.required?.forEach((key) => {\n\t\t\t\t\t\tif (!(key in obj)) {\n\t\t\t\t\t\t\tlet last = obj[key];\n\t\t\t\t\t\t\tlet prop = schema.properties?.[key];\n\t\t\t\t\t\t\tif (prop && isNil(last)) obj[key] = JsonSchema.create(prop, last);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tout = validate({ schema, data: obj, mutate: true });\n\t\t\t\t\tif (!out.success) {\n\t\t\t\t\t\tconsole.warn(`Failed to create object with schema: ${out.message}`);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn out.data;\n\t\t\t})\n\t\t\t.with({ type: 'null' }, () => null)\n\t\t\t.with({ type: 'boolean' }, (schema) => false)\n\t\t\t.with({ type: 'array' }, (schema) => [])\n\t\t\t.otherwise(() => {\n\t\t\t\treturn undefined;\n\t\t\t});\n\t}\n\n\texport function isPrimitiveType(schema: any): boolean {\n\t\treturn match(schema as JsonSchemaDef)\n\t\t\t.returnType<boolean>()\n\t\t\t.with({ type: P.union('number', 'integer', 'string', 'boolean') }, () => true)\n\t\t\t.with({ anyOf: P.nonNullable }, (schema) => {\n\t\t\t\treturn isPrimitiveType(schema.anyOf[0]);\n\t\t\t})\n\t\t\t.with({ oneOf: P.nonNullable }, (schema) => {\n\t\t\t\treturn isPrimitiveType(schema.oneOf[0]);\n\t\t\t})\n\t\t\t.otherwise(() => false);\n\t}\n}\n"],"names":["Ajv","addFormats","localize","addKeywords","isNil","match","P","_createAjv","opt","ajv","validate","schema","data","mutate","clone","opts","strict","strictSchema","Object","assign","removeAdditional","useDefaults","coerceTypes","allErrors","structuredClone","JsonSchema","createAjv","compile","valid","errors","success","message","errorsText","schemas","addSchema","onConflict","$id","Error","old","_","neo","idx","findIndex","s","push","check","safeParse","parse","out","create","returnType","with","const","select","v","default","anyOf","nonNullable","oneOf","type","union","obj","required","forEach","key","last","prop","properties","console","warn","otherwise","undefined","isPrimitiveType"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/jsonschema/types.d.ts"],"sourcesContent":["type JsonSchemaTypeName =\n
|
|
1
|
+
{"version":3,"sources":["../../src/jsonschema/types.d.ts"],"sourcesContent":["type JsonSchemaTypeName =\n\t| 'string' //\n\t| 'number'\n\t| 'integer'\n\t| 'boolean'\n\t| 'object'\n\t| 'array'\n\t| 'null';\n\ntype JsonValue =\n\t| string //\n\t| number\n\t| boolean\n\t| { [key: string]: JsonValue }\n\t| JsonValue[]\n\t| null;\n\ntype JsonSchemaVersion =\n\t| 'http://json-schema.org/schema' // latest\n\t| 'https://json-schema.org/draft/2020-12/schema'\n\t// draft-07\n\t| 'http://json-schema.org/draft-07/schema#' //\n\t| 'http://json-schema.org/draft-07/hyper-schema#';\n\ntype JsonSchemaFormatName =\n\t//\n\t| 'date-time'\n\t| 'date'\n\t| 'time'\n\t| 'duration'\n\t//\n\t| 'email'\n\t| 'idn-email'\n\t//\n\t| 'hostname'\n\t| 'idn-hostname'\n\t| 'ipv4'\n\t| 'ipv6'\n\t//\n\t| 'uri'\n\t| 'uri-reference'\n\t| 'iri'\n\t| 'iri-reference'\n\t| 'uuid'\n\t| 'uri-template'\n\t| 'regex'\n\t| 'json-pointer'\n\t| 'relative-json-pointer';\n\nexport type JsonSchemaDef = {\n\t$id?: string;\n\t$ref?: string;\n\t/**\n\t * Meta schema\n\t *\n\t * Recommended values:\n\t * - 'http://json-schema.org/schema#'\n\t * - 'http://json-schema.org/hyper-schema#'\n\t * - 'http://json-schema.org/draft-07/schema#'\n\t * - 'http://json-schema.org/draft-07/hyper-schema#'\n\t *\n\t * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-5\n\t */\n\t$schema?: JsonSchemaVersion | string;\n\t$comment?: string;\n\n\t$defs?: { [key: string]: JsonSchemaDef };\n\n\ttype?: JsonSchemaTypeName | JsonSchemaTypeName[];\n\tenum?: JsonValue[];\n\tconst?: JsonValue;\n\n\t//region Numeric Validation\n\n\tmultipleOf?: number;\n\tmaximum?: number;\n\texclusiveMaximum?: number;\n\tminimum?: number;\n\texclusiveMinimum?: number;\n\n\t//endregion\n\n\t//region String Validation\n\n\tmaxLength?: number;\n\tminLength?: number;\n\tpattern?: string;\n\n\t//endregion\n\n\t//region Array Validation\n\n\titems?: JsonSchemaDef | JsonSchemaDef[];\n\tadditionalItems?: JsonSchemaDef;\n\tmaxItems?: number;\n\tminItems?: number;\n\tuniqueItems?: boolean;\n\tcontains?: JsonSchemaDef;\n\t//endregion\n\n\t//region Object Validation\n\n\tmaxProperties?: number;\n\tminProperties?: number;\n\trequired?: string[];\n\tproperties?: { [key: string]: JsonSchemaDef };\n\tpatternProperties?: { [key: string]: JsonSchemaDef };\n\tadditionalProperties?: JsonSchemaDef;\n\tdependencies?: { [key: string]: JsonSchemaDef | string[] };\n\tpropertyNames?: JsonSchemaDef;\n\t//endregion\n\n\t//region Conditional\n\n\tif?: JsonSchemaDef;\n\tthen?: JsonSchemaDef;\n\telse?: JsonSchemaDef;\n\n\t//endregion\n\n\t//region Boolean Logic\n\n\tallOf?: JsonSchemaDef[];\n\tanyOf?: JsonSchemaDef[];\n\toneOf?: JsonSchemaDef[];\n\tnot?: JsonSchemaDef;\n\t//endregion\n\n\t//region Semantic\n\n\tformat?: JsonSchemaFormatName | string;\n\n\t//endregion\n\n\t//region String-Encoding Non-JSON Data\n\n\tcontentMediaType?: string;\n\tcontentEncoding?: string;\n\tcontentSchema?: JsonSchemaDef;\n\t//endregion\n\n\t/**\n\t * use {@link $defs} instead\n\t */\n\tdefinitions?: Record<string, JsonSchemaDef>;\n\n\t//region Meta-Data Annotations\n\t/**\n\t * @see https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-10\n\t */\n\n\ttitle?: string;\n\tdescription?: string;\n\tdefault?: JsonValue;\n\treadOnly?: boolean;\n\twriteOnly?: boolean;\n\texamples?: JsonValue;\n\tdeprecated?: boolean;\n\n\t//endregion\n\n\tnullable?: boolean;\n};\n"],"names":[],"mappings":"AAiDA,WAiHE"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
let _all = [];
|
|
2
|
+
export function defineFileType({ type = '', types = [], extension = '', extensions = [], ...opts }) {
|
|
3
|
+
if (!type) {
|
|
4
|
+
type = types[0] || '';
|
|
5
|
+
}
|
|
6
|
+
if (!extension) {
|
|
7
|
+
extension = extensions[0] || '';
|
|
8
|
+
}
|
|
9
|
+
if (!types.includes(type)) {
|
|
10
|
+
types = [
|
|
11
|
+
type,
|
|
12
|
+
...types
|
|
13
|
+
];
|
|
14
|
+
}
|
|
15
|
+
if (!extensions.includes(extension)) {
|
|
16
|
+
extensions = [
|
|
17
|
+
extension,
|
|
18
|
+
...extensions
|
|
19
|
+
];
|
|
20
|
+
}
|
|
21
|
+
const def = {
|
|
22
|
+
title: opts.title || opts.name,
|
|
23
|
+
type,
|
|
24
|
+
extension,
|
|
25
|
+
types,
|
|
26
|
+
extensions,
|
|
27
|
+
tags: [],
|
|
28
|
+
metadata: {},
|
|
29
|
+
...opts
|
|
30
|
+
};
|
|
31
|
+
let idx = _all.findIndex((v)=>v.name === def.name);
|
|
32
|
+
if (idx >= 0) {
|
|
33
|
+
_all[idx] = def;
|
|
34
|
+
console.warn(`File type ${def.name} is redefined`);
|
|
35
|
+
} else {
|
|
36
|
+
_all.push(def);
|
|
37
|
+
}
|
|
38
|
+
return def;
|
|
39
|
+
}
|
|
40
|
+
export function getFileType() {
|
|
41
|
+
return _all;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=defineFileType.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/meta/defineFileType.tsx"],"sourcesContent":["type DefineFileTypeOptions = {\n\tname: string;\n\ttitle?: string;\n\tdescription?: string;\n\ttype?: string;\n\ttypes?: string[];\n\textension?: string;\n\textensions?: string[];\n\ttags?: string[];\n\tmetadata?: Record<string, any>;\n};\nexport type FileTypeDef = {\n\tname: string;\n\ttitle: string;\n\tdescription?: string;\n\ttype: string; // primary type\n\textension: string; // primary extension\n\ttypes: string[];\n\textensions: string[];\n\ttags: string[];\n\tmetadata: Record<string, any>;\n};\n\nlet _all: FileTypeDef[] = [];\n\nexport function defineFileType({\n\ttype = '',\n\ttypes = [],\n\textension = '',\n\textensions = [],\n\t...opts\n}: DefineFileTypeOptions): FileTypeDef {\n\tif (!type) {\n\t\ttype = types[0] || '';\n\t}\n\tif (!extension) {\n\t\textension = extensions[0] || '';\n\t}\n\tif (!types.includes(type)) {\n\t\ttypes = [type, ...types];\n\t}\n\tif (!extensions.includes(extension)) {\n\t\textensions = [extension, ...extensions];\n\t}\n\n\tconst def: FileTypeDef = {\n\t\ttitle: opts.title || opts.name,\n\t\ttype,\n\t\textension,\n\t\ttypes,\n\t\textensions,\n\t\ttags: [],\n\t\tmetadata: {},\n\t\t...opts,\n\t};\n\tlet idx = _all.findIndex((v) => v.name === def.name);\n\tif (idx >= 0) {\n\t\t_all[idx] = def;\n\t\tconsole.warn(`File type ${def.name} is redefined`);\n\t} else {\n\t\t_all.push(def);\n\t}\n\treturn def;\n}\n\nexport function getFileType(): FileTypeDef[] {\n\treturn _all;\n}\n"],"names":["_all","defineFileType","type","types","extension","extensions","opts","includes","def","title","name","tags","metadata","idx","findIndex","v","console","warn","push","getFileType"],"mappings":"AAuBA,IAAIA,OAAsB,EAAE;AAE5B,OAAO,SAASC,eAAe,EAC9BC,OAAO,EAAE,EACTC,QAAQ,EAAE,EACVC,YAAY,EAAE,EACdC,aAAa,EAAE,EACf,GAAGC,MACoB;IACvB,IAAI,CAACJ,MAAM;QACVA,OAAOC,KAAK,CAAC,EAAE,IAAI;IACpB;IACA,IAAI,CAACC,WAAW;QACfA,YAAYC,UAAU,CAAC,EAAE,IAAI;IAC9B;IACA,IAAI,CAACF,MAAMI,QAAQ,CAACL,OAAO;QAC1BC,QAAQ;YAACD;eAASC;SAAM;IACzB;IACA,IAAI,CAACE,WAAWE,QAAQ,CAACH,YAAY;QACpCC,aAAa;YAACD;eAAcC;SAAW;IACxC;IAEA,MAAMG,MAAmB;QACxBC,OAAOH,KAAKG,KAAK,IAAIH,KAAKI,IAAI;QAC9BR;QACAE;QACAD;QACAE;QACAM,MAAM,EAAE;QACRC,UAAU,CAAC;QACX,GAAGN,IAAI;IACR;IACA,IAAIO,MAAMb,KAAKc,SAAS,CAAC,CAACC,IAAMA,EAAEL,IAAI,KAAKF,IAAIE,IAAI;IACnD,IAAIG,OAAO,GAAG;QACbb,IAAI,CAACa,IAAI,GAAGL;QACZQ,QAAQC,IAAI,CAAC,CAAC,UAAU,EAAET,IAAIE,IAAI,CAAC,aAAa,CAAC;IAClD,OAAO;QACNV,KAAKkB,IAAI,CAACV;IACX;IACA,OAAOA;AACR;AAEA,OAAO,SAASW;IACf,OAAOnB;AACR"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/meta/defineInit.ts"],"sourcesContent":["import type { MaybePromise } from '@wener/utils';\nimport { startCase } from 'es-toolkit';\n\ntype DefineInitOptions = {
|
|
1
|
+
{"version":3,"sources":["../../src/meta/defineInit.ts"],"sourcesContent":["import type { MaybePromise } from '@wener/utils';\nimport { startCase } from 'es-toolkit';\n\ntype DefineInitOptions = { name: string; title?: string; onInit?: () => any; metadata?: Record<string, any> };\nexport type InitDef = { name: string; title: string; onInit?: () => any; metadata: Record<string, any> };\nlet _all: InitDef[] = [];\n\nexport function defineInit(o: DefineInitOptions) {\n\tconst def = { title: startCase(o.name), metadata: {}, ...o };\n\tlet idx = _all.findIndex((v) => v.name === def.name);\n\tif (idx >= 0) {\n\t\tconsole.warn(`skip redefined init: ${def.name}`);\n\t} else {\n\t\t_all.push(def);\n\t}\n\n\treturn def;\n}\n\nlet result = new Map<any, MaybePromise<InitResult>>();\n\ntype InitResult = { name: string; success: boolean; error?: any };\n\nexport async function runInit(inits = _all) {\n\tfor (let init of inits) {\n\t\tif (result.get(init)) {\n\t\t\treturn;\n\t\t}\n\t\tresult.set(\n\t\t\tinit,\n\t\t\tPromise.resolve().then(async () => {\n\t\t\t\tlet out: InitResult = { name: init.name, success: true };\n\t\t\t\ttry {\n\t\t\t\t\tawait init.onInit?.();\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(`Failed to init ${init.name}`, e);\n\t\t\t\t\tout.success = false;\n\t\t\t\t\tout.error = e;\n\t\t\t\t}\n\t\t\t\tresult.set(init, out);\n\t\t\t\treturn out;\n\t\t\t}),\n\t\t);\n\t}\n\n\treturn Promise.all(result.values());\n}\n"],"names":["startCase","_all","defineInit","o","def","title","name","metadata","idx","findIndex","v","console","warn","push","result","Map","runInit","inits","init","get","set","Promise","resolve","then","out","success","onInit","e","error","all","values"],"mappings":"AACA,SAASA,SAAS,QAAQ,aAAa;AAIvC,IAAIC,OAAkB,EAAE;AAExB,OAAO,SAASC,WAAWC,CAAoB;IAC9C,MAAMC,MAAM;QAAEC,OAAOL,UAAUG,EAAEG,IAAI;QAAGC,UAAU,CAAC;QAAG,GAAGJ,CAAC;IAAC;IAC3D,IAAIK,MAAMP,KAAKQ,SAAS,CAAC,CAACC,IAAMA,EAAEJ,IAAI,KAAKF,IAAIE,IAAI;IACnD,IAAIE,OAAO,GAAG;QACbG,QAAQC,IAAI,CAAC,CAAC,qBAAqB,EAAER,IAAIE,IAAI,EAAE;IAChD,OAAO;QACNL,KAAKY,IAAI,CAACT;IACX;IAEA,OAAOA;AACR;AAEA,IAAIU,SAAS,IAAIC;AAIjB,OAAO,eAAeC,QAAQC,QAAQhB,IAAI;IACzC,KAAK,IAAIiB,QAAQD,MAAO;QACvB,IAAIH,OAAOK,GAAG,CAACD,OAAO;YACrB;QACD;QACAJ,OAAOM,GAAG,CACTF,MACAG,QAAQC,OAAO,GAAGC,IAAI,CAAC;YACtB,IAAIC,MAAkB;gBAAElB,MAAMY,KAAKZ,IAAI;gBAAEmB,SAAS;YAAK;YACvD,IAAI;gBACH,MAAMP,KAAKQ,MAAM;YAClB,EAAE,OAAOC,GAAG;gBACXhB,QAAQiB,KAAK,CAAC,CAAC,eAAe,EAAEV,KAAKZ,IAAI,EAAE,EAAEqB;gBAC7CH,IAAIC,OAAO,GAAG;gBACdD,IAAII,KAAK,GAAGD;YACb;YACAb,OAAOM,GAAG,CAACF,MAAMM;YACjB,OAAOA;QACR;IAEF;IAEA,OAAOH,QAAQQ,GAAG,CAACf,OAAOgB,MAAM;AACjC"}
|
|
@@ -18,9 +18,20 @@ export function createMetadataKey(a, b) {
|
|
|
18
18
|
}
|
|
19
19
|
return k;
|
|
20
20
|
}
|
|
21
|
-
export function defineMetadata(
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
export function defineMetadata(a, b, c) {
|
|
22
|
+
if (Array.isArray(b)) {
|
|
23
|
+
const key = a;
|
|
24
|
+
const items = b;
|
|
25
|
+
for (const [res, opts] of items){
|
|
26
|
+
defineMetadata(res, key, opts);
|
|
27
|
+
}
|
|
28
|
+
} else {
|
|
29
|
+
const res = a;
|
|
30
|
+
const key = b;
|
|
31
|
+
const opts = c;
|
|
32
|
+
res.metadata = res.metadata || {};
|
|
33
|
+
set(res.metadata, key.key, opts);
|
|
34
|
+
}
|
|
24
35
|
}
|
|
25
36
|
export function getMetadata(res, key) {
|
|
26
37
|
if (!res?.metadata) return undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/meta/defineMetadata.ts"],"sourcesContent":["import { startCase } from 'es-toolkit';\nimport { get, set } from 'es-toolkit/compat';\n\ntype HasMetadata = {
|
|
1
|
+
{"version":3,"sources":["../../src/meta/defineMetadata.ts"],"sourcesContent":["import { startCase } from 'es-toolkit';\nimport { get, set } from 'es-toolkit/compat';\n\ntype HasMetadata = { metadata?: Record<string, any> };\n\ntype MetadataKey<T> = { key: string; type: T; title: string; description?: string };\n\ninterface CreateMetadataKeyOptions {\n\tkey: string;\n\ttitle?: string;\n\tdescription?: string;\n}\n\nexport function createMetadataKey<T = never>(key: string, opts?: Omit<CreateMetadataKeyOptions, 'key'>): MetadataKey<T>;\nexport function createMetadataKey<T = never>(opts: CreateMetadataKeyOptions): MetadataKey<T>;\nexport function createMetadataKey<T = never>(a: any, b?: any): MetadataKey<T> {\n\tconst opts: CreateMetadataKeyOptions = typeof a === 'string' ? { key: a, ...b } : a;\n\n\tconst { key } = opts;\n\topts.title ||= startCase(key);\n\n\tconst k: MetadataKey<T> = { ...opts, type: null as any } as MetadataKey<T>;\n\n\tif ('toStringTag' in Symbol && typeof Symbol.toStringTag === 'symbol') {\n\t\tObject.defineProperty(k, Symbol.toStringTag, { value: key });\n\t}\n\n\treturn k;\n}\n\nexport function defineMetadata<T>(res: HasMetadata, key: MetadataKey<T>, opts: T): void;\nexport function defineMetadata<T>(key: MetadataKey<T>, items: Array<[HasMetadata, T]>): void;\nexport function defineMetadata<T>(a: any, b: any, c?: any) {\n\tif (Array.isArray(b)) {\n\t\tconst key = a;\n\t\tconst items = b;\n\t\tfor (const [res, opts] of items) {\n\t\t\tdefineMetadata(res, key, opts);\n\t\t}\n\t} else {\n\t\tconst res = a;\n\t\tconst key = b;\n\t\tconst opts = c;\n\t\tres.metadata = res.metadata || {};\n\t\tset(res.metadata, key.key, opts);\n\t}\n}\n\nexport function getMetadata<T>(res: HasMetadata | undefined | null, key: MetadataKey<T>): T | undefined {\n\tif (!res?.metadata) return undefined;\n\treturn get(res.metadata, key.key);\n}\n"],"names":["startCase","get","set","createMetadataKey","a","b","opts","key","title","k","type","Symbol","toStringTag","Object","defineProperty","value","defineMetadata","c","Array","isArray","items","res","metadata","getMetadata","undefined"],"mappings":"AAAA,SAASA,SAAS,QAAQ,aAAa;AACvC,SAASC,GAAG,EAAEC,GAAG,QAAQ,oBAAoB;AAc7C,OAAO,SAASC,kBAA6BC,CAAM,EAAEC,CAAO;IAC3D,MAAMC,OAAiC,OAAOF,MAAM,WAAW;QAAEG,KAAKH;QAAG,GAAGC,CAAC;IAAC,IAAID;IAElF,MAAM,EAAEG,GAAG,EAAE,GAAGD;IAChBA,KAAKE,KAAK,KAAKR,UAAUO;IAEzB,MAAME,IAAoB;QAAE,GAAGH,IAAI;QAAEI,MAAM;IAAY;IAEvD,IAAI,iBAAiBC,UAAU,OAAOA,OAAOC,WAAW,KAAK,UAAU;QACtEC,OAAOC,cAAc,CAACL,GAAGE,OAAOC,WAAW,EAAE;YAAEG,OAAOR;QAAI;IAC3D;IAEA,OAAOE;AACR;AAIA,OAAO,SAASO,eAAkBZ,CAAM,EAAEC,CAAM,EAAEY,CAAO;IACxD,IAAIC,MAAMC,OAAO,CAACd,IAAI;QACrB,MAAME,MAAMH;QACZ,MAAMgB,QAAQf;QACd,KAAK,MAAM,CAACgB,KAAKf,KAAK,IAAIc,MAAO;YAChCJ,eAAeK,KAAKd,KAAKD;QAC1B;IACD,OAAO;QACN,MAAMe,MAAMjB;QACZ,MAAMG,MAAMF;QACZ,MAAMC,OAAOW;QACbI,IAAIC,QAAQ,GAAGD,IAAIC,QAAQ,IAAI,CAAC;QAChCpB,IAAImB,IAAIC,QAAQ,EAAEf,IAAIA,GAAG,EAAED;IAC5B;AACD;AAEA,OAAO,SAASiB,YAAeF,GAAmC,EAAEd,GAAmB;IACtF,IAAI,CAACc,KAAKC,UAAU,OAAOE;IAC3B,OAAOvB,IAAIoB,IAAIC,QAAQ,EAAEf,IAAIA,GAAG;AACjC"}
|
package/lib/meta/index.js
CHANGED
package/lib/meta/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/meta/index.ts"],"sourcesContent":["export { createMetadataKey, defineMetadata, getMetadata } from './defineMetadata';\n\nexport { defineInit, type InitDef, runInit } from './defineInit';\n"],"names":["createMetadataKey","defineMetadata","getMetadata","defineInit","runInit"],"mappings":"AAAA,SAASA,iBAAiB,EAAEC,cAAc,EAAEC,WAAW,QAAQ,mBAAmB;AAElF,SAASC,UAAU,EAAgBC,OAAO,QAAQ,eAAe"}
|
|
1
|
+
{"version":3,"sources":["../../src/meta/index.ts"],"sourcesContent":["export { createMetadataKey, defineMetadata, getMetadata } from './defineMetadata';\n\nexport { defineInit, type InitDef, runInit } from './defineInit';\n\nexport { defineFileType, getFileType, type FileTypeDef } from './defineFileType';\n"],"names":["createMetadataKey","defineMetadata","getMetadata","defineInit","runInit","defineFileType","getFileType"],"mappings":"AAAA,SAASA,iBAAiB,EAAEC,cAAc,EAAEC,WAAW,QAAQ,mBAAmB;AAElF,SAASC,UAAU,EAAgBC,OAAO,QAAQ,eAAe;AAEjE,SAASC,cAAc,EAAEC,WAAW,QAA0B,mBAAmB"}
|
package/lib/password/PHC.js
CHANGED
|
@@ -107,10 +107,10 @@ import { ArrayBuffers } from "@wener/utils";
|
|
|
107
107
|
return phcstr;
|
|
108
108
|
}
|
|
109
109
|
/**
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
110
|
+
* Generates a PHC string using the data provided.
|
|
111
|
+
* @param {SerializeOptions} opts Object that holds the data needed to generate the PHC string.
|
|
112
|
+
* @return {string} The hash string adhering to the PHC format.
|
|
113
|
+
*/ PHC.serialize = serialize;
|
|
114
114
|
function deserialize(phcstr) {
|
|
115
115
|
if (typeof phcstr !== 'string' || phcstr === '') {
|
|
116
116
|
throw new TypeError('pchstr must be a non-empty string');
|
|
@@ -190,10 +190,10 @@ import { ArrayBuffers } from "@wener/utils";
|
|
|
190
190
|
return phcobj;
|
|
191
191
|
}
|
|
192
192
|
/**
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
193
|
+
* Parses data from a PHC string.
|
|
194
|
+
* @param {string} phcstr A PHC string to parse.
|
|
195
|
+
* @return {DeserializeResult} The object containing the data parsed from the PHC string.
|
|
196
|
+
*/ PHC.deserialize = deserialize;
|
|
197
197
|
})(PHC || (PHC = {}));
|
|
198
198
|
export var PHC;
|
|
199
199
|
|