@asapjs/schema 1.0.0-alpha.0 → 1.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dataWithSchema.d.ts +16 -0
- package/dist/dataWithSchema.d.ts.map +1 -0
- package/dist/dataWithSchema.js +64 -0
- package/dist/dataWithSchema.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SchemaType } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* 스키마 기준으로 데이터 유효성 검사.
|
|
4
|
+
* 필수 필드 누락, 타입/제약 위반 시 throw.
|
|
5
|
+
*/
|
|
6
|
+
export declare function validateDataWithSchema(data: unknown, schema: Record<string, SchemaType | (() => SchemaType)>): void;
|
|
7
|
+
/**
|
|
8
|
+
* 단일 필드 타입/제약 검사.
|
|
9
|
+
*/
|
|
10
|
+
export declare function validateFieldType(fieldName: string, value: unknown, schemaType: SchemaType): void;
|
|
11
|
+
/**
|
|
12
|
+
* 스키마에 맞춰 데이터만 변환 (유효성 검사 없음).
|
|
13
|
+
* TypeIs.INT면 "1" → 1, TypeIs.STRING이면 그대로 등.
|
|
14
|
+
*/
|
|
15
|
+
export declare function mapDataWithSchema(data: Record<string, unknown>, schema: Record<string, SchemaType | (() => SchemaType)>): Record<string, unknown>;
|
|
16
|
+
//# sourceMappingURL=dataWithSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataWithSchema.d.ts","sourceRoot":"","sources":["../src/dataWithSchema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAO1C;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,CAAC,MAAM,UAAU,CAAC,CAAC,GACtD,IAAI,CAoBN;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,UAAU,GACrB,IAAI,CAMN;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,CAAC,MAAM,UAAU,CAAC,CAAC,GACtD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAwBzB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateDataWithSchema = validateDataWithSchema;
|
|
4
|
+
exports.validateFieldType = validateFieldType;
|
|
5
|
+
exports.mapDataWithSchema = mapDataWithSchema;
|
|
6
|
+
/** TypeIs가 함수로 전달된 경우 실행하여 SchemaType 반환 */
|
|
7
|
+
function resolveSchemaType(typeIs) {
|
|
8
|
+
return typeof typeIs === 'function' ? typeIs() : typeIs;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* 스키마 기준으로 데이터 유효성 검사.
|
|
12
|
+
* 필수 필드 누락, 타입/제약 위반 시 throw.
|
|
13
|
+
*/
|
|
14
|
+
function validateDataWithSchema(data, schema) {
|
|
15
|
+
if (!data || typeof data !== 'object') {
|
|
16
|
+
throw new Error('Invalid data: must be an object');
|
|
17
|
+
}
|
|
18
|
+
const record = data;
|
|
19
|
+
for (const [key, typeIs] of Object.entries(schema)) {
|
|
20
|
+
const value = record[key];
|
|
21
|
+
const schemaType = resolveSchemaType(typeIs);
|
|
22
|
+
const isOptional = schemaType.__options?.optional ?? false;
|
|
23
|
+
if (value === undefined && !isOptional) {
|
|
24
|
+
throw new Error(`Missing required field: ${key}`);
|
|
25
|
+
}
|
|
26
|
+
if (value !== undefined) {
|
|
27
|
+
validateFieldType(key, value, schemaType);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 단일 필드 타입/제약 검사.
|
|
33
|
+
*/
|
|
34
|
+
function validateFieldType(fieldName, value, schemaType) {
|
|
35
|
+
if (!schemaType.validate(value)) {
|
|
36
|
+
throw new Error(`Field '${fieldName}' has invalid type for ${schemaType.__name}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 스키마에 맞춰 데이터만 변환 (유효성 검사 없음).
|
|
41
|
+
* TypeIs.INT면 "1" → 1, TypeIs.STRING이면 그대로 등.
|
|
42
|
+
*/
|
|
43
|
+
function mapDataWithSchema(data, schema) {
|
|
44
|
+
if (!data || typeof data !== 'object') {
|
|
45
|
+
return data;
|
|
46
|
+
}
|
|
47
|
+
const result = {};
|
|
48
|
+
for (const [key, typeIs] of Object.entries(schema)) {
|
|
49
|
+
const value = data[key];
|
|
50
|
+
const schemaType = resolveSchemaType(typeIs);
|
|
51
|
+
if (value === undefined) {
|
|
52
|
+
result[key] = undefined;
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
result[key] = schemaType.parse(value);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
result[key] = value;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=dataWithSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataWithSchema.js","sourceRoot":"","sources":["../src/dataWithSchema.ts"],"names":[],"mappings":";;AAWA,wDAuBC;AAKD,8CAUC;AAMD,8CA2BC;AAhFD,4CAA4C;AAC5C,SAAS,iBAAiB,CAAC,MAAuC;IAChE,OAAO,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,SAAgB,sBAAsB,CACpC,IAAa,EACb,MAAuD;IAEvD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,MAAM,GAAG,IAA+B,CAAC;IAE/C,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1B,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAyC,CAAC,CAAC;QAChF,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,EAAE,QAAQ,IAAI,KAAK,CAAC;QAE3D,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAC/B,SAAiB,EACjB,KAAc,EACd,UAAsB;IAEtB,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CACb,UAAU,SAAS,0BAA0B,UAAU,CAAC,MAAM,EAAE,CACjE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,iBAAiB,CAC/B,IAA6B,EAC7B,MAAuD;IAEvD,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;QACxB,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAyC,CAAC,CAAC;QAEhF,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;YACxB,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QACtB,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './types';
|
|
2
2
|
export * from './registry';
|
|
3
3
|
export * from './base';
|
|
4
|
+
export { validateDataWithSchema, validateFieldType, mapDataWithSchema, } from './dataWithSchema';
|
|
4
5
|
export { TypeIs, TypeIsInterface, extendTypeIs } from './TypeIs';
|
|
5
6
|
export * from './types/int';
|
|
6
7
|
export * from './types/string';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGjE,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAG5B,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -14,11 +14,15 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.sequelizePlugin = exports.swaggerPlugin = exports.extendTypeIs = exports.TypeIs = void 0;
|
|
17
|
+
exports.sequelizePlugin = exports.swaggerPlugin = exports.extendTypeIs = exports.TypeIs = exports.mapDataWithSchema = exports.validateFieldType = exports.validateDataWithSchema = void 0;
|
|
18
18
|
// Core exports
|
|
19
19
|
__exportStar(require("./types"), exports);
|
|
20
20
|
__exportStar(require("./registry"), exports);
|
|
21
21
|
__exportStar(require("./base"), exports);
|
|
22
|
+
var dataWithSchema_1 = require("./dataWithSchema");
|
|
23
|
+
Object.defineProperty(exports, "validateDataWithSchema", { enumerable: true, get: function () { return dataWithSchema_1.validateDataWithSchema; } });
|
|
24
|
+
Object.defineProperty(exports, "validateFieldType", { enumerable: true, get: function () { return dataWithSchema_1.validateFieldType; } });
|
|
25
|
+
Object.defineProperty(exports, "mapDataWithSchema", { enumerable: true, get: function () { return dataWithSchema_1.mapDataWithSchema; } });
|
|
22
26
|
// TypeIs factory
|
|
23
27
|
var TypeIs_1 = require("./TypeIs");
|
|
24
28
|
Object.defineProperty(exports, "TypeIs", { enumerable: true, get: function () { return TypeIs_1.TypeIs; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,eAAe;AACf,0CAAwB;AACxB,6CAA2B;AAC3B,yCAAuB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,eAAe;AACf,0CAAwB;AACxB,6CAA2B;AAC3B,yCAAuB;AACvB,mDAI0B;AAHxB,wHAAA,sBAAsB,OAAA;AACtB,mHAAA,iBAAiB,OAAA;AACjB,mHAAA,iBAAiB,OAAA;AAGnB,iBAAiB;AACjB,mCAAiE;AAAxD,gGAAA,MAAM,OAAA;AAAmB,sGAAA,YAAY,OAAA;AAE9C,uBAAuB;AACvB,8CAA4B;AAC5B,iDAA+B;AAC/B,gDAA8B;AAC9B,kDAAgC;AAChC,+CAA6B;AAC7B,gDAA8B;AAC9B,iDAA+B;AAC/B,+CAA6B;AAC7B,mDAAiC;AACjC,+CAA6B;AAC7B,mDAAiC;AACjC,kDAAgC;AAChC,iDAA+B;AAC/B,mDAAiC;AACjC,8CAA4B;AAE5B,mBAAmB;AACnB,6CAAkD;AAAzC,wGAAA,aAAa,OAAA;AACtB,iDAAsD;AAA7C,4GAAA,eAAe,OAAA;AAExB,wBAAwB;AACxB,yCAAsC;AACtC,+CAAkD;AAClD,mDAAsD;AAEtD,mBAAQ,CAAC,QAAQ,CAAC,uBAAa,CAAC,CAAC;AAEjC,yCAAyC;AACzC,IAAI,CAAC;IACH,mBAAQ,CAAC,QAAQ,CAAC,2BAAe,CAAC,CAAC;AACrC,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC;IACX,2BAA2B;AAC7B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@asapjs/schema",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.1",
|
|
4
4
|
"description": "Schema definition and validation system for AsapJS",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -20,5 +20,5 @@
|
|
|
20
20
|
"@types/node": "^17.0.21",
|
|
21
21
|
"typescript": "^5.8.3"
|
|
22
22
|
},
|
|
23
|
-
"gitHead": "
|
|
23
|
+
"gitHead": "84779254dfe56c6e01cfa219b6234058cae9aca8"
|
|
24
24
|
}
|