sonamu 0.5.3 → 0.5.5

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.
Files changed (56) hide show
  1. package/dist/api/code-converters.d.ts +8 -5
  2. package/dist/api/code-converters.d.ts.map +1 -1
  3. package/dist/api/code-converters.js +1 -1
  4. package/dist/api/code-converters.js.map +1 -1
  5. package/dist/api/context.d.ts +9 -2
  6. package/dist/api/context.d.ts.map +1 -1
  7. package/dist/api/decorators.d.ts +6 -1
  8. package/dist/api/decorators.d.ts.map +1 -1
  9. package/dist/api/decorators.js +1 -1
  10. package/dist/api/decorators.js.map +1 -1
  11. package/dist/api/sonamu.d.ts +1 -0
  12. package/dist/api/sonamu.d.ts.map +1 -1
  13. package/dist/api/sonamu.js +1 -1
  14. package/dist/api/sonamu.js.map +1 -1
  15. package/dist/bin/cli-wrapper.js +1 -1
  16. package/dist/bin/cli-wrapper.js.map +1 -1
  17. package/dist/database/puri-wrapper.d.ts +8 -1
  18. package/dist/database/puri-wrapper.d.ts.map +1 -1
  19. package/dist/database/puri-wrapper.js +1 -1
  20. package/dist/database/puri-wrapper.js.map +1 -1
  21. package/dist/database/puri.d.ts +2 -0
  22. package/dist/database/puri.d.ts.map +1 -1
  23. package/dist/database/puri.js +1 -1
  24. package/dist/database/puri.js.map +1 -1
  25. package/dist/database/puri.types.d.ts +4 -8
  26. package/dist/database/puri.types.d.ts.map +1 -1
  27. package/dist/index.d.ts +2 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +1 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/migration/code-generation.js +1 -1
  32. package/dist/migration/code-generation.js.map +1 -1
  33. package/dist/migration/types.d.ts +2 -1
  34. package/dist/migration/types.d.ts.map +1 -1
  35. package/dist/syncer/syncer.d.ts +1 -0
  36. package/dist/syncer/syncer.d.ts.map +1 -1
  37. package/dist/templates/generated_http.template.d.ts.map +1 -1
  38. package/dist/templates/generated_http.template.js +1 -1
  39. package/dist/templates/generated_http.template.js.map +1 -1
  40. package/dist/templates/generated_sso.template.d.ts.map +1 -1
  41. package/dist/templates/generated_sso.template.js +1 -1
  42. package/dist/templates/generated_sso.template.js.map +1 -1
  43. package/dist/templates/service.template.d.ts.map +1 -1
  44. package/dist/templates/service.template.js +1 -1
  45. package/dist/templates/service.template.js.map +1 -1
  46. package/dist/testing/fixture-manager.d.ts.map +1 -1
  47. package/dist/testing/fixture-manager.js +1 -1
  48. package/dist/testing/fixture-manager.js.map +1 -1
  49. package/dist/types/types.d.ts +11 -2
  50. package/dist/types/types.d.ts.map +1 -1
  51. package/dist/types/types.js.map +1 -1
  52. package/package.json +6 -2
  53. package/src/api/code-converters.ts +41 -31
  54. package/src/api/context.ts +11 -2
  55. package/src/api/sonamu.ts +43 -2
  56. package/src/types/types.ts +18 -2
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Sonamu",{enumerable:true,get:function(){return Sonamu}});var _async_hooks=require("async_hooks");var _chalk=/*#__PURE__*/_interop_require_default(require("chalk"));var _fastify=/*#__PURE__*/_interop_require_default(require("fastify"));var _promises=require("fs/promises");var _path=/*#__PURE__*/_interop_require_default(require("path"));var _fsutils=require("../utils/fs-utils");var _datefnstz=require("date-fns-tz");var _zod=require("zod");var _db=require("../database/db");var _knexonduplicateupdate=require("../database/knex-plugins/knex-on-duplicate-update");var _soexceptions=require("../exceptions/so-exceptions");var _sse=require("../stream/sse");var _types=require("../types/types");var _controller=require("../utils/controller");var _utils=require("../utils/utils");var _zoderror=require("../utils/zod-error");var _caster=require("./caster");var _codeconverters=require("./code-converters");function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _array_with_holes(arr){if(Array.isArray(arr))return arr}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _class_call_check(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _create_class(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function _instanceof(left,right){if(right!=null&&typeof Symbol!=="undefined"&&right[Symbol.hasInstance]){return!!right[Symbol.hasInstance](left)}else{return left instanceof right}}function _interop_require_default(obj){return obj&&obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap;var cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interop_require_wildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj}}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj)}var newObj={__proto__:null};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc)}else{newObj[key]=obj[key]}}}newObj.default=obj;if(cache){cache.set(obj,newObj)}return newObj}function _iterable_to_array_limit(arr,i){var _i=arr==null?null:typeof Symbol!=="undefined"&&arr[Symbol.iterator]||arr["@@iterator"];if(_i==null)return;var _arr=[];var _n=true;var _d=false;var _s,_e;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break}}catch(err){_d=true;_e=err}finally{try{if(!_n&&_i["return"]!=null)_i["return"]()}finally{if(_d)throw _e}}return _arr}function _non_iterable_rest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _object_spread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};var ownKeys=Object.keys(source);if(typeof Object.getOwnPropertySymbols==="function"){ownKeys=ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym){return Object.getOwnPropertyDescriptor(source,sym).enumerable}))}ownKeys.forEach(function(key){_define_property(target,key,source[key])})}return target}function _sliced_to_array(arr,i){return _array_with_holes(arr)||_iterable_to_array_limit(arr,i)||_unsupported_iterable_to_array(arr,i)||_non_iterable_rest()}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o==="string")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}function _ts_generator(thisArg,body){var f,y,t,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},g=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return g.next=verb(0),g["throw"]=verb(1),g["return"]=verb(2),typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(g&&(g=0,op[0]&&(_=0)),_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var SonamuClass=/*#__PURE__*/function(){"use strict";function SonamuClass(){_class_call_check(this,SonamuClass);_define_property(this,"isInitialized",false);_define_property(this,"asyncLocalStorage",new _async_hooks.AsyncLocalStorage);_define_property(this,"uploadStorage",new _async_hooks.AsyncLocalStorage);_define_property(this,"_apiRootPath",null);_define_property(this,"_dbConfig",null);_define_property(this,"_syncer",null);_define_property(this,"_config",null);_define_property(this,"_secrets",null);_define_property(this,"_storage",null);_define_property(this,"watcher",null);_define_property(this,"pendingFiles",[]);_define_property(this,"hmrStartTime",0);_define_property(this,"server",null)}_create_class(SonamuClass,[{key:"getContext",value:function getContext(){var store=this.asyncLocalStorage.getStore();if(store===null||store===void 0?void 0:store.context){return store.context}throw new Error("Sonamu cannot find context")}},{key:"getUploadContext",value:function getUploadContext(){var store=this.uploadStorage.getStore();if(store===null||store===void 0?void 0:store.uploadContext){return store.uploadContext}throw new Error("Sonamu cannot find upload context. Did you use @upload decorator?")}},{key:"apiRootPath",get:function get(){if(this._apiRootPath===null){throw new Error("Sonamu has not been initialized")}return this._apiRootPath},set:function set(apiRootPath){this._apiRootPath=apiRootPath}},{key:"appRootPath",get:function get(){return this.apiRootPath.split(_path.default.sep).slice(0,-1).join(_path.default.sep)}},{key:"dbConfig",get:function get(){if(this._dbConfig===null){throw new Error("Sonamu has not been initialized")}return this._dbConfig},set:function set(dbConfig){this._dbConfig=dbConfig}},{key:"syncer",get:function get(){if(this._syncer===null){throw new Error("Sonamu has not been initialized")}return this._syncer},set:function set(syncer){this._syncer=syncer}},{key:"config",get:function get(){if(this._config===null){throw new Error("Sonamu has not been initialized")}return this._config},set:function set(config){this._config=config}},{key:"secrets",get:function get(){return this._secrets},set:function set(secrets){this._secrets=secrets}},{key:"storage",get:function get(){return this._storage},set:function set(storage){this._storage=storage}},{key:"initForTesting",value:function initForTesting(){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.init(true,false,undefined,true)];case 1:_state.sent();return[2]}})}).call(this)}},{key:"init",value:function init(){var doSilent=arguments.length>0&&arguments[0]!==void 0?arguments[0]:false,enableSync=arguments.length>1&&arguments[1]!==void 0?arguments[1]:true,apiRootPath=arguments.length>2?arguments[2]:void 0,forTesting=arguments.length>3&&arguments[3]!==void 0?arguments[3]:false;return _async_to_generator(function(){var configPath,secretsPath,_,_1,_2,_3,_4,EntityManager,Syncer;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(this.isInitialized){return[2]}!doSilent&&console.time(_chalk.default.cyan("Sonamu.init".concat(forTesting?" for testing":"")));this.apiRootPath=apiRootPath!==null&&apiRootPath!==void 0?apiRootPath:(0,_utils.findApiRootPath)();configPath=_path.default.join(this.apiRootPath,"sonamu.config.json");secretsPath=_path.default.join(this.apiRootPath,"sonamu.secrets.json");return[4,(0,_fsutils.exists)(configPath)];case 1:if(!_state.sent()){throw new Error("Cannot find sonamu.config.json in ".concat(configPath))}_=this;_1=JSON.parse;return[4,(0,_promises.readFile)(configPath)];case 2:_.config=_1.apply(JSON,[_state.sent().toString()]);return[4,(0,_fsutils.exists)(secretsPath)];case 3:if(!_state.sent())return[3,5];_2=this;_3=JSON.parse;return[4,(0,_promises.readFile)(secretsPath)];case 4:_2.secrets=_3.apply(JSON,[_state.sent().toString()]);_state.label=5;case 5:_4=this;return[4,_db.DB.readKnexfile()];case 6:_4.dbConfig=_state.sent();!doSilent&&console.log(_chalk.default.green("DB Config Loaded!"));(0,_knexonduplicateupdate.attachOnDuplicateUpdate)();if(forTesting){this.isInitialized=true;return[2]}return[4,Promise.resolve().then(function(){return /*#__PURE__*/_interop_require_wildcard(require("../entity/entity-manager"))})];case 7:EntityManager=_state.sent().EntityManager;return[4,EntityManager.autoload(doSilent)];case 8:_state.sent();return[4,Promise.resolve().then(function(){return /*#__PURE__*/_interop_require_wildcard(require("../syncer/syncer"))})];case 9:Syncer=_state.sent().Syncer;this.syncer=new Syncer;return[4,this.syncer.autoloadModels()];case 10:_state.sent();return[4,this.syncer.autoloadTypes()];case 11:_state.sent();return[4,this.syncer.autoloadApis()];case 12:_state.sent();if(!((0,_controller.isLocal)()&&!(0,_controller.isTest)()&&enableSync))return[3,14];return[4,this.syncer.sync()];case 13:_state.sent();this.startWatcher();this.syncer.syncUI();_state.label=14;case 14:this.isInitialized=true;!doSilent&&console.timeEnd(_chalk.default.cyan("Sonamu.init"));return[2]}})}).call(this)}},{key:"createServer",value:function createServer(options,initOptions){return _async_to_generator(function(){var server;return _ts_generator(this,function(_state){switch(_state.label){case 0:server=(0,_fastify.default)(options.fastify);this.server=server;if(options.storage){this.storage=options.storage}if(options.plugins){this.registerPlugins(server,options.plugins)}return[4,this.withFastify(server,options.apiConfig,{enableSync:initOptions===null||initOptions===void 0?void 0:initOptions.enableSync,doSilent:initOptions===null||initOptions===void 0?void 0:initOptions.doSilent})];case 1:_state.sent();return[4,this.boot(server,options)];case 2:_state.sent();return[2,server]}})}).call(this)}},{key:"withFastify",value:function withFastify(server,config,options){return _async_to_generator(function(){var _this,timezone,DATE_FORMAT,ISO_DATE_REGEX;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;if(!(this.isInitialized===false))return[3,2];return[4,this.init(options===null||options===void 0?void 0:options.doSilent,options===null||options===void 0?void 0:options.enableSync)];case 1:_state.sent();_state.label=2;case 2:this.server=server;timezone=this.config.timezone;if(timezone){DATE_FORMAT="yyyy-MM-dd'T'HH:mm:ssXXX";ISO_DATE_REGEX=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z$/;server.setReplySerializer(function(payload){return JSON.stringify(payload,function(_key,value){if(typeof value==="string"&&ISO_DATE_REGEX.test(value)){return(0,_datefnstz.formatInTimeZone)(new Date(value),timezone,DATE_FORMAT)}return value})});!(options===null||options===void 0?void 0:options.doSilent)&&console.log(_chalk.default.green("Timezone set to ".concat(timezone)))}server.get("".concat(this.config.route.prefix,"/routes"),function(_request,_reply){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,this.syncer.apis]})}).call(_this)});server.get("".concat(this.config.route.prefix,"/healthcheck"),function(_request,_reply){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,"ok"]})})()});if((0,_controller.isLocal)()){server.all("*",function(request,reply){var found=_this.syncer.apis.find(function(api){var _api_options_httpMethod;return _this.config.route.prefix+api.path===request.url.split("?")[0]&&((_api_options_httpMethod=api.options.httpMethod)!==null&&_api_options_httpMethod!==void 0?_api_options_httpMethod:"GET")===request.method.toUpperCase()});if(found){return _this.getApiHandler(found,config)(request,reply)}throw new _soexceptions.NotFoundException("존재하지 않는 API 접근입니다.")})}else{this.syncer.apis.map(function(api){if(_this.syncer.models[api.modelName]===undefined){throw new Error("정의되지 않은 모델에 접근 ".concat(api.modelName))}server.route({method:api.options.httpMethod,url:_this.config.route.prefix+api.path,handler:_this.getApiHandler(api,config)})})}return[2]}})}).call(this)}},{key:"getApiHandler",value:function getApiHandler(api,config){var _this=this;return function(request,reply){return _async_to_generator(function(){var _api_options_guards,ReqType,which,reqBody,_request_which,messages,_api_options_contentType,_ref,cacheKey,cacheTtl,cachedData,createSSE,context,model;return _ts_generator(this,function(_state){switch(_state.label){case 0:((_api_options_guards=api.options.guards)!==null&&_api_options_guards!==void 0?_api_options_guards:[]).every(function(guard){return config.guardHandler(guard,request,api)});ReqType=(0,_codeconverters.getZodObjectFromApi)(api,this.syncer.types);which=api.options.httpMethod==="GET"?"query":"body";try{;reqBody=(0,_caster.fastifyCaster)(ReqType).parse((_request_which=request[which])!==null&&_request_which!==void 0?_request_which:{})}catch(e){if(_instanceof(e,_zod.ZodError)){messages=(0,_zoderror.humanizeZodError)(e).map(function(issue){return issue.message}).join(" ");throw new _soexceptions.BadRequestException(messages,{zodError:e})}else{throw e}}reply.type((_api_options_contentType=api.options.contentType)!==null&&_api_options_contentType!==void 0?_api_options_contentType:"application/json");return[4,function(){return _async_to_generator(function(){var cacheKeyRes,cacheKey,cacheTtl,cachedData,e;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(!config.cache)return[3,5];_state.label=1;case 1:_state.trys.push([1,3,,4]);cacheKeyRes=config.cache.resolveKey(api.path,reqBody);if(cacheKeyRes.cache===false){return[2,{cacheKey:null,cachedData:null}]}cacheKey=cacheKeyRes.key;cacheTtl=cacheKeyRes.ttl;return[4,config.cache.get(cacheKey)];case 2:cachedData=_state.sent();return[2,{cacheKey:cacheKey,cacheTtl:cacheTtl,cachedData:cachedData}];case 3:e=_state.sent();console.error(e);return[3,4];case 4:return[2,{cacheKey:null,cachedData:null}];case 5:return[2,{cacheKey:null,cachedData:null}]}})})()}()];case 1:_ref=_state.sent(),cacheKey=_ref.cacheKey,cacheTtl=_ref.cacheTtl,cachedData=_ref.cachedData;if(cachedData!==null){return[2,cachedData]}createSSE=(function(_request,_reply,_events){return(0,_sse.createSSEFactory)(_request.socket,_reply,_events)}).bind(null,request,reply);context=_object_spread({},config.contextProvider({request:request,reply:reply,headers:request.headers,createSSE:createSSE},request,reply));model=this.syncer.models[api.modelName];return[2,this.asyncLocalStorage.run({context:context},function(){return _async_to_generator(function(){var result,_api_options_contentType;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,model[api.methodName].apply(model,api.parameters.map(function(param){if(_types.ApiParamType.isContext(param.type)){return context}else{return reqBody[param.name]}}))];case 1:result=_state.sent();reply.type((_api_options_contentType=api.options.contentType)!==null&&_api_options_contentType!==void 0?_api_options_contentType:"application/json");if(!(config.cache&&cacheKey))return[3,3];return[4,config.cache.put(cacheKey,result,cacheTtl)];case 2:_state.sent();_state.label=3;case 3:return[2,result]}})})()})]}})}).call(_this)}}},{key:"startWatcher",value:function startWatcher(){var _this=this;var watchPath=_path.default.join(this.apiRootPath,"src");var chokidar=require("chokidar");this.watcher=chokidar.watch(watchPath,{ignored:function(path,stats){return!!(stats===null||stats===void 0?void 0:stats.isFile())&&!path.endsWith(".ts")&&!path.endsWith(".json")||path.endsWith("src/index.ts")},persistent:true,ignoreInitial:true});this.watcher.on("all",function(event,filePath){return _async_to_generator(function(){var e;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(event!=="change"&&event!=="add"){return[2]}_state.label=1;case 1:_state.trys.push([1,3,,4]);return[4,this.handleFileChange(event,filePath)];case 2:_state.sent();return[3,4];case 3:e=_state.sent();console.error(e);return[3,4];case 4:return[2]}})}).call(_this)})}},{key:"runScript",value:function runScript(fn){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.init(true,false,undefined,false)];case 1:_state.sent();_state.label=2;case 2:_state.trys.push([2,,4,6]);return[4,fn()];case 3:_state.sent();return[3,6];case 4:return[4,this.destroy()];case 5:_state.sent();return[7];case 6:return[2]}})}).call(this)}},{key:"registerPlugins",value:function registerPlugins(server,plugins){if(!plugins){return}var pluginsModules={cors:"@fastify/cors",formbody:"@fastify/formbody",multipart:"@fastify/multipart",qs:"fastify-qs",sse:"fastify-sse-v2"};var registerPlugin=function(key,pluginName){var option=plugins[key];if(!option)return;if(option===true){server.register(Promise.resolve(pluginName).then(function(p){return /*#__PURE__*/_interop_require_wildcard(require(p))}))}else{server.register(Promise.resolve(pluginName).then(function(p){return /*#__PURE__*/_interop_require_wildcard(require(p))}),option)}};Object.entries(pluginsModules).forEach(function(param){var _param=_sliced_to_array(param,2),key=_param[0],pluginName=_param[1];registerPlugin(key,pluginName)});if(plugins.custom){plugins.custom(server)}}},{key:"boot",value:function boot(server,options){return _async_to_generator(function(){var _this,_options_listen,_options_listen1,_options_lifecycle,_options_listen_port,port,_options_listen_host,host,shutdown,_options_lifecycle1;return _ts_generator(this,function(_state){_this=this;port=(_options_listen_port=(_options_listen=options.listen)===null||_options_listen===void 0?void 0:_options_listen.port)!==null&&_options_listen_port!==void 0?_options_listen_port:3e3;host=(_options_listen_host=(_options_listen1=options.listen)===null||_options_listen1===void 0?void 0:_options_listen1.host)!==null&&_options_listen_host!==void 0?_options_listen_host:"localhost";server.addHook("onClose",function(){return _async_to_generator(function(){var _options_lifecycle_onShutdown,_options_lifecycle;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,(_options_lifecycle=options.lifecycle)===null||_options_lifecycle===void 0?void 0:(_options_lifecycle_onShutdown=_options_lifecycle.onShutdown)===null||_options_lifecycle_onShutdown===void 0?void 0:_options_lifecycle_onShutdown.call(_options_lifecycle,server)];case 1:_state.sent();return[4,this.destroy()];case 2:_state.sent();return[2]}})}).call(_this)});shutdown=function(){return _async_to_generator(function(){var err;return _ts_generator(this,function(_state){switch(_state.label){case 0:_state.trys.push([0,2,,3]);return[4,server.close()];case 1:_state.sent();process.exit(0);return[3,3];case 2:err=_state.sent();console.error("Error during shutdown:",err);process.exit(1);return[3,3];case 3:return[2]}})})()};process.on("SIGINT",shutdown);process.on("SIGTERM",shutdown);if((_options_lifecycle=options.lifecycle)===null||_options_lifecycle===void 0?void 0:_options_lifecycle.onError){;server.setErrorHandler((_options_lifecycle1=options.lifecycle)===null||_options_lifecycle1===void 0?void 0:_options_lifecycle1.onError)}server.listen({port:port,host:host}).then(function(){return _async_to_generator(function(){var _options_lifecycle_onStart,_options_lifecycle;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,(_options_lifecycle=options.lifecycle)===null||_options_lifecycle===void 0?void 0:(_options_lifecycle_onStart=_options_lifecycle.onStart)===null||_options_lifecycle_onStart===void 0?void 0:_options_lifecycle_onStart.call(_options_lifecycle,server)];case 1:_state.sent();return[2]}})})()}).catch(function(err){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:console.error(_chalk.default.red("Failed to start server:",err));return[4,shutdown()];case 1:_state.sent();return[2]}})})()});return[2]})}).call(this)}},{key:"handleFileChange",value:function handleFileChange(event,filePath){return _async_to_generator(function(){var relativePath;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(this.pendingFiles.length===0){this.hmrStartTime=Date.now()}this.pendingFiles.push(filePath);relativePath=filePath.replace(this.apiRootPath,"api");console.log(_chalk.default.bold("Detected(".concat(event,"): ").concat(_chalk.default.blue(relativePath))));return[4,this.syncer.syncFromWatcher([filePath])];case 1:_state.sent();this.pendingFiles=this.pendingFiles.slice(1);if(!(this.pendingFiles.length===0))return[3,3];return[4,this.finishHMR()];case 2:_state.sent();_state.label=3;case 3:return[2]}})}).call(this)}},{key:"finishHMR",value:function finishHMR(){return _async_to_generator(function(){var _,_1,endTime,totalTime,msg,margin;return _ts_generator(this,function(_state){switch(_state.label){case 0:_1=(_=this.syncer).saveChecksums;return[4,this.syncer.getCurrentChecksums()];case 1:return[4,_1.apply(_,[_state.sent()])];case 2:_state.sent();endTime=Date.now();totalTime=endTime-this.hmrStartTime;msg="HMR Done! ".concat(_chalk.default.bold.white("".concat(totalTime,"ms")));margin=Math.max(0,(process.stdout.columns-msg.length)/2);console.log(_chalk.default.black.bgGreen(" ".repeat(margin)+msg+" ".repeat(margin)));return[2]}})}).call(this)}},{key:"destroy",value:function destroy(){return _async_to_generator(function(){var _this_watcher,_this_storage,BaseModel;return _ts_generator(this,function(_state){switch(_state.label){case 0:BaseModel=require("../database/base-model").BaseModel;return[4,BaseModel.destroy()];case 1:_state.sent();return[4,(_this_watcher=this.watcher)===null||_this_watcher===void 0?void 0:_this_watcher.close()];case 2:_state.sent();(_this_storage=this.storage)===null||_this_storage===void 0?void 0:_this_storage.destroy();return[2]}})}).call(this)}}]);return SonamuClass}();var Sonamu=new SonamuClass;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Sonamu",{enumerable:true,get:function(){return Sonamu}});var _async_hooks=require("async_hooks");var _chalk=/*#__PURE__*/_interop_require_default(require("chalk"));var _fastify=/*#__PURE__*/_interop_require_default(require("fastify"));var _promises=require("fs/promises");var _path=/*#__PURE__*/_interop_require_default(require("path"));var _fsutils=require("../utils/fs-utils");var _datefnstz=require("date-fns-tz");var _zod=require("zod");var _db=require("../database/db");var _knexonduplicateupdate=require("../database/knex-plugins/knex-on-duplicate-update");var _soexceptions=require("../exceptions/so-exceptions");var _sse=require("../stream/sse");var _types=require("../types/types");var _controller=require("../utils/controller");var _utils=require("../utils/utils");var _zoderror=require("../utils/zod-error");var _caster=require("./caster");var _codeconverters=require("./code-converters");var _passport=/*#__PURE__*/_interop_require_default(require("@fastify/passport"));function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _array_with_holes(arr){if(Array.isArray(arr))return arr}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _class_call_check(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _create_class(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function _instanceof(left,right){if(right!=null&&typeof Symbol!=="undefined"&&right[Symbol.hasInstance]){return!!right[Symbol.hasInstance](left)}else{return left instanceof right}}function _interop_require_default(obj){return obj&&obj.__esModule?obj:{default:obj}}function _getRequireWildcardCache(nodeInterop){if(typeof WeakMap!=="function")return null;var cacheBabelInterop=new WeakMap;var cacheNodeInterop=new WeakMap;return(_getRequireWildcardCache=function(nodeInterop){return nodeInterop?cacheNodeInterop:cacheBabelInterop})(nodeInterop)}function _interop_require_wildcard(obj,nodeInterop){if(!nodeInterop&&obj&&obj.__esModule){return obj}if(obj===null||typeof obj!=="object"&&typeof obj!=="function"){return{default:obj}}var cache=_getRequireWildcardCache(nodeInterop);if(cache&&cache.has(obj)){return cache.get(obj)}var newObj={__proto__:null};var hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){if(key!=="default"&&Object.prototype.hasOwnProperty.call(obj,key)){var desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null;if(desc&&(desc.get||desc.set)){Object.defineProperty(newObj,key,desc)}else{newObj[key]=obj[key]}}}newObj.default=obj;if(cache){cache.set(obj,newObj)}return newObj}function _iterable_to_array_limit(arr,i){var _i=arr==null?null:typeof Symbol!=="undefined"&&arr[Symbol.iterator]||arr["@@iterator"];if(_i==null)return;var _arr=[];var _n=true;var _d=false;var _s,_e;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break}}catch(err){_d=true;_e=err}finally{try{if(!_n&&_i["return"]!=null)_i["return"]()}finally{if(_d)throw _e}}return _arr}function _non_iterable_rest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _object_spread(target){for(var i=1;i<arguments.length;i++){var source=arguments[i]!=null?arguments[i]:{};var ownKeys=Object.keys(source);if(typeof Object.getOwnPropertySymbols==="function"){ownKeys=ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym){return Object.getOwnPropertyDescriptor(source,sym).enumerable}))}ownKeys.forEach(function(key){_define_property(target,key,source[key])})}return target}function _sliced_to_array(arr,i){return _array_with_holes(arr)||_iterable_to_array_limit(arr,i)||_unsupported_iterable_to_array(arr,i)||_non_iterable_rest()}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o==="string")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}function _ts_generator(thisArg,body){var f,y,t,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},g=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return g.next=verb(0),g["throw"]=verb(1),g["return"]=verb(2),typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(g&&(g=0,op[0]&&(_=0)),_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var SonamuClass=/*#__PURE__*/function(){"use strict";function SonamuClass(){_class_call_check(this,SonamuClass);_define_property(this,"isInitialized",false);_define_property(this,"asyncLocalStorage",new _async_hooks.AsyncLocalStorage);_define_property(this,"uploadStorage",new _async_hooks.AsyncLocalStorage);_define_property(this,"_apiRootPath",null);_define_property(this,"_dbConfig",null);_define_property(this,"_syncer",null);_define_property(this,"_config",null);_define_property(this,"_secrets",null);_define_property(this,"_storage",null);_define_property(this,"watcher",null);_define_property(this,"pendingFiles",[]);_define_property(this,"hmrStartTime",0);_define_property(this,"server",null)}_create_class(SonamuClass,[{key:"getContext",value:function getContext(){var store=this.asyncLocalStorage.getStore();if(store===null||store===void 0?void 0:store.context){return store.context}throw new Error("Sonamu cannot find context")}},{key:"getUploadContext",value:function getUploadContext(){var store=this.uploadStorage.getStore();if(store===null||store===void 0?void 0:store.uploadContext){return store.uploadContext}throw new Error("Sonamu cannot find upload context. Did you use @upload decorator?")}},{key:"apiRootPath",get:function get(){if(this._apiRootPath===null){throw new Error("Sonamu has not been initialized")}return this._apiRootPath},set:function set(apiRootPath){this._apiRootPath=apiRootPath}},{key:"appRootPath",get:function get(){return this.apiRootPath.split(_path.default.sep).slice(0,-1).join(_path.default.sep)}},{key:"dbConfig",get:function get(){if(this._dbConfig===null){throw new Error("Sonamu has not been initialized")}return this._dbConfig},set:function set(dbConfig){this._dbConfig=dbConfig}},{key:"syncer",get:function get(){if(this._syncer===null){throw new Error("Sonamu has not been initialized")}return this._syncer},set:function set(syncer){this._syncer=syncer}},{key:"config",get:function get(){if(this._config===null){throw new Error("Sonamu has not been initialized")}return this._config},set:function set(config){this._config=config}},{key:"secrets",get:function get(){return this._secrets},set:function set(secrets){this._secrets=secrets}},{key:"storage",get:function get(){return this._storage},set:function set(storage){this._storage=storage}},{key:"initForTesting",value:function initForTesting(){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.init(true,false,undefined,true)];case 1:_state.sent();return[2]}})}).call(this)}},{key:"init",value:function init(){var doSilent=arguments.length>0&&arguments[0]!==void 0?arguments[0]:false,enableSync=arguments.length>1&&arguments[1]!==void 0?arguments[1]:true,apiRootPath=arguments.length>2?arguments[2]:void 0,forTesting=arguments.length>3&&arguments[3]!==void 0?arguments[3]:false;return _async_to_generator(function(){var configPath,secretsPath,_,_1,_2,_3,_4,EntityManager,Syncer;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(this.isInitialized){return[2]}!doSilent&&console.time(_chalk.default.cyan("Sonamu.init".concat(forTesting?" for testing":"")));this.apiRootPath=apiRootPath!==null&&apiRootPath!==void 0?apiRootPath:(0,_utils.findApiRootPath)();configPath=_path.default.join(this.apiRootPath,"sonamu.config.json");secretsPath=_path.default.join(this.apiRootPath,"sonamu.secrets.json");return[4,(0,_fsutils.exists)(configPath)];case 1:if(!_state.sent()){throw new Error("Cannot find sonamu.config.json in ".concat(configPath))}_=this;_1=JSON.parse;return[4,(0,_promises.readFile)(configPath)];case 2:_.config=_1.apply(JSON,[_state.sent().toString()]);return[4,(0,_fsutils.exists)(secretsPath)];case 3:if(!_state.sent())return[3,5];_2=this;_3=JSON.parse;return[4,(0,_promises.readFile)(secretsPath)];case 4:_2.secrets=_3.apply(JSON,[_state.sent().toString()]);_state.label=5;case 5:_4=this;return[4,_db.DB.readKnexfile()];case 6:_4.dbConfig=_state.sent();!doSilent&&console.log(_chalk.default.green("DB Config Loaded!"));(0,_knexonduplicateupdate.attachOnDuplicateUpdate)();if(forTesting){this.isInitialized=true;return[2]}return[4,Promise.resolve().then(function(){return /*#__PURE__*/_interop_require_wildcard(require("../entity/entity-manager"))})];case 7:EntityManager=_state.sent().EntityManager;return[4,EntityManager.autoload(doSilent)];case 8:_state.sent();return[4,Promise.resolve().then(function(){return /*#__PURE__*/_interop_require_wildcard(require("../syncer/syncer"))})];case 9:Syncer=_state.sent().Syncer;this.syncer=new Syncer;return[4,this.syncer.autoloadModels()];case 10:_state.sent();return[4,this.syncer.autoloadTypes()];case 11:_state.sent();return[4,this.syncer.autoloadApis()];case 12:_state.sent();if(!((0,_controller.isLocal)()&&!(0,_controller.isTest)()&&enableSync))return[3,14];return[4,this.syncer.sync()];case 13:_state.sent();this.startWatcher();this.syncer.syncUI();_state.label=14;case 14:this.isInitialized=true;!doSilent&&console.timeEnd(_chalk.default.cyan("Sonamu.init"));return[2]}})}).call(this)}},{key:"createServer",value:function createServer(options,initOptions){return _async_to_generator(function(){var server,_options_plugins;return _ts_generator(this,function(_state){switch(_state.label){case 0:server=(0,_fastify.default)(options.fastify);this.server=server;if(options.storage){this.storage=options.storage}if(options.plugins){this.registerPlugins(server,options.plugins)}if(options.auth){;if(!((_options_plugins=options.plugins)===null||_options_plugins===void 0?void 0:_options_plugins.session)){throw new Error("Auth requires session plugin. Please add plugins.session configuration.")}this.registerAuth(server,options.auth)}return[4,this.withFastify(server,options.apiConfig,{enableSync:initOptions===null||initOptions===void 0?void 0:initOptions.enableSync,doSilent:initOptions===null||initOptions===void 0?void 0:initOptions.doSilent})];case 1:_state.sent();return[4,this.boot(server,options)];case 2:_state.sent();return[2,server]}})}).call(this)}},{key:"withFastify",value:function withFastify(server,config,options){return _async_to_generator(function(){var _this,timezone,DATE_FORMAT,ISO_DATE_REGEX;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;if(!(this.isInitialized===false))return[3,2];return[4,this.init(options===null||options===void 0?void 0:options.doSilent,options===null||options===void 0?void 0:options.enableSync)];case 1:_state.sent();_state.label=2;case 2:this.server=server;timezone=this.config.timezone;if(timezone){DATE_FORMAT="yyyy-MM-dd'T'HH:mm:ssXXX";ISO_DATE_REGEX=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{3})?Z$/;server.setReplySerializer(function(payload){return JSON.stringify(payload,function(_key,value){if(typeof value==="string"&&ISO_DATE_REGEX.test(value)){return(0,_datefnstz.formatInTimeZone)(new Date(value),timezone,DATE_FORMAT)}return value})});!(options===null||options===void 0?void 0:options.doSilent)&&console.log(_chalk.default.green("Timezone set to ".concat(timezone)))}server.get("".concat(this.config.route.prefix,"/routes"),function(_request,_reply){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,this.syncer.apis]})}).call(_this)});server.get("".concat(this.config.route.prefix,"/healthcheck"),function(_request,_reply){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,"ok"]})})()});if((0,_controller.isLocal)()){server.all("*",function(request,reply){var found=_this.syncer.apis.find(function(api){var _api_options_httpMethod;return _this.config.route.prefix+api.path===request.url.split("?")[0]&&((_api_options_httpMethod=api.options.httpMethod)!==null&&_api_options_httpMethod!==void 0?_api_options_httpMethod:"GET")===request.method.toUpperCase()});if(found){return _this.getApiHandler(found,config)(request,reply)}throw new _soexceptions.NotFoundException("존재하지 않는 API 접근입니다.")})}else{this.syncer.apis.map(function(api){if(_this.syncer.models[api.modelName]===undefined){throw new Error("정의되지 않은 모델에 접근 ".concat(api.modelName))}server.route({method:api.options.httpMethod,url:_this.config.route.prefix+api.path,handler:_this.getApiHandler(api,config)})})}return[2]}})}).call(this)}},{key:"getApiHandler",value:function getApiHandler(api,config){var _this=this;return function(request,reply){return _async_to_generator(function(){var _api_options_guards,ReqType,which,reqBody,_request_which,messages,_api_options_contentType,_ref,cacheKey,cacheTtl,cachedData,createSSE,_request_user,context,model;return _ts_generator(this,function(_state){switch(_state.label){case 0:((_api_options_guards=api.options.guards)!==null&&_api_options_guards!==void 0?_api_options_guards:[]).every(function(guard){return config.guardHandler(guard,request,api)});ReqType=(0,_codeconverters.getZodObjectFromApi)(api,this.syncer.types);which=api.options.httpMethod==="GET"?"query":"body";try{;reqBody=(0,_caster.fastifyCaster)(ReqType).parse((_request_which=request[which])!==null&&_request_which!==void 0?_request_which:{})}catch(e){if(_instanceof(e,_zod.ZodError)){messages=(0,_zoderror.humanizeZodError)(e).map(function(issue){return issue.message}).join(" ");throw new _soexceptions.BadRequestException(messages,{zodError:e})}else{throw e}}reply.type((_api_options_contentType=api.options.contentType)!==null&&_api_options_contentType!==void 0?_api_options_contentType:"application/json");return[4,function(){return _async_to_generator(function(){var cacheKeyRes,cacheKey,cacheTtl,cachedData,e;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(!config.cache)return[3,5];_state.label=1;case 1:_state.trys.push([1,3,,4]);cacheKeyRes=config.cache.resolveKey(api.path,reqBody);if(cacheKeyRes.cache===false){return[2,{cacheKey:null,cachedData:null}]}cacheKey=cacheKeyRes.key;cacheTtl=cacheKeyRes.ttl;return[4,config.cache.get(cacheKey)];case 2:cachedData=_state.sent();return[2,{cacheKey:cacheKey,cacheTtl:cacheTtl,cachedData:cachedData}];case 3:e=_state.sent();console.error(e);return[3,4];case 4:return[2,{cacheKey:null,cachedData:null}];case 5:return[2,{cacheKey:null,cachedData:null}]}})})()}()];case 1:_ref=_state.sent(),cacheKey=_ref.cacheKey,cacheTtl=_ref.cacheTtl,cachedData=_ref.cachedData;if(cachedData!==null){return[2,cachedData]}createSSE=(function(_request,_reply,_events){return(0,_sse.createSSEFactory)(_request.socket,_reply,_events)}).bind(null,request,reply);context=_object_spread({},config.contextProvider({request:request,reply:reply,headers:request.headers,createSSE:createSSE,user:(_request_user=request.user)!==null&&_request_user!==void 0?_request_user:null,passport:{login:request.login.bind(request),logout:request.logout.bind(request)}},request,reply));model=this.syncer.models[api.modelName];return[2,this.asyncLocalStorage.run({context:context},function(){return _async_to_generator(function(){var result,_api_options_contentType;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,model[api.methodName].apply(model,api.parameters.map(function(param){if(_types.ApiParamType.isContext(param.type)){return context}else{return reqBody[param.name]}}))];case 1:result=_state.sent();reply.type((_api_options_contentType=api.options.contentType)!==null&&_api_options_contentType!==void 0?_api_options_contentType:"application/json");if(!(config.cache&&cacheKey))return[3,3];return[4,config.cache.put(cacheKey,result,cacheTtl)];case 2:_state.sent();_state.label=3;case 3:return[2,result]}})})()})]}})}).call(_this)}}},{key:"startWatcher",value:function startWatcher(){var _this=this;var watchPath=_path.default.join(this.apiRootPath,"src");var chokidar=require("chokidar");this.watcher=chokidar.watch(watchPath,{ignored:function(path,stats){return!!(stats===null||stats===void 0?void 0:stats.isFile())&&!path.endsWith(".ts")&&!path.endsWith(".json")||path.endsWith("src/index.ts")},persistent:true,ignoreInitial:true});this.watcher.on("all",function(event,filePath){return _async_to_generator(function(){var e;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(event!=="change"&&event!=="add"){return[2]}_state.label=1;case 1:_state.trys.push([1,3,,4]);return[4,this.handleFileChange(event,filePath)];case 2:_state.sent();return[3,4];case 3:e=_state.sent();console.error(e);return[3,4];case 4:return[2]}})}).call(_this)})}},{key:"runScript",value:function runScript(fn){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.init(true,false,undefined,false)];case 1:_state.sent();_state.label=2;case 2:_state.trys.push([2,,4,6]);return[4,fn()];case 3:_state.sent();return[3,6];case 4:return[4,this.destroy()];case 5:_state.sent();return[7];case 6:return[2]}})}).call(this)}},{key:"registerPlugins",value:function registerPlugins(server,plugins){if(!plugins){return}var pluginsModules={cors:"@fastify/cors",formbody:"@fastify/formbody",multipart:"@fastify/multipart",qs:"fastify-qs",sse:"fastify-sse-v2",static:"@fastify/static",session:"@fastify/secure-session"};var registerPlugin=function(key,pluginName){var option=plugins[key];if(!option)return;if(option===true){server.register(Promise.resolve(pluginName).then(function(p){return /*#__PURE__*/_interop_require_wildcard(require(p))}))}else{server.register(Promise.resolve(pluginName).then(function(p){return /*#__PURE__*/_interop_require_wildcard(require(p))}),option)}};Object.entries(pluginsModules).forEach(function(param){var _param=_sliced_to_array(param,2),key=_param[0],pluginName=_param[1];registerPlugin(key,pluginName)});if(plugins.custom){plugins.custom(server)}}},{key:"registerAuth",value:function registerAuth(server,options){return _async_to_generator(function(){return _ts_generator(this,function(_state){server.register(_passport.default.initialize());server.register(_passport.default.secureSession());if(typeof options==="boolean"){_passport.default.registerUserSerializer(function(user,_request){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,user]})})()});_passport.default.registerUserDeserializer(function(serialized,_request){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,serialized]})})()})}else{_passport.default.registerUserSerializer(options.userSerializer);_passport.default.registerUserDeserializer(options.userDeserializer)}return[2]})})()}},{key:"boot",value:function boot(server,options){return _async_to_generator(function(){var _this,_options_listen,_options_listen1,_options_lifecycle,_options_listen_port,port,_options_listen_host,host,shutdown,_options_lifecycle1;return _ts_generator(this,function(_state){_this=this;port=(_options_listen_port=(_options_listen=options.listen)===null||_options_listen===void 0?void 0:_options_listen.port)!==null&&_options_listen_port!==void 0?_options_listen_port:3e3;host=(_options_listen_host=(_options_listen1=options.listen)===null||_options_listen1===void 0?void 0:_options_listen1.host)!==null&&_options_listen_host!==void 0?_options_listen_host:"localhost";server.addHook("onClose",function(){return _async_to_generator(function(){var _options_lifecycle_onShutdown,_options_lifecycle;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,(_options_lifecycle=options.lifecycle)===null||_options_lifecycle===void 0?void 0:(_options_lifecycle_onShutdown=_options_lifecycle.onShutdown)===null||_options_lifecycle_onShutdown===void 0?void 0:_options_lifecycle_onShutdown.call(_options_lifecycle,server)];case 1:_state.sent();return[4,this.destroy()];case 2:_state.sent();return[2]}})}).call(_this)});shutdown=function(){return _async_to_generator(function(){var err;return _ts_generator(this,function(_state){switch(_state.label){case 0:_state.trys.push([0,2,,3]);return[4,server.close()];case 1:_state.sent();process.exit(0);return[3,3];case 2:err=_state.sent();console.error("Error during shutdown:",err);process.exit(1);return[3,3];case 3:return[2]}})})()};process.on("SIGINT",shutdown);process.on("SIGTERM",shutdown);if((_options_lifecycle=options.lifecycle)===null||_options_lifecycle===void 0?void 0:_options_lifecycle.onError){;server.setErrorHandler((_options_lifecycle1=options.lifecycle)===null||_options_lifecycle1===void 0?void 0:_options_lifecycle1.onError)}server.listen({port:port,host:host}).then(function(){return _async_to_generator(function(){var _options_lifecycle_onStart,_options_lifecycle;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,(_options_lifecycle=options.lifecycle)===null||_options_lifecycle===void 0?void 0:(_options_lifecycle_onStart=_options_lifecycle.onStart)===null||_options_lifecycle_onStart===void 0?void 0:_options_lifecycle_onStart.call(_options_lifecycle,server)];case 1:_state.sent();return[2]}})})()}).catch(function(err){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:console.error(_chalk.default.red("Failed to start server:",err));return[4,shutdown()];case 1:_state.sent();return[2]}})})()});return[2]})}).call(this)}},{key:"handleFileChange",value:function handleFileChange(event,filePath){return _async_to_generator(function(){var relativePath;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(this.pendingFiles.length===0){this.hmrStartTime=Date.now()}this.pendingFiles.push(filePath);relativePath=filePath.replace(this.apiRootPath,"api");console.log(_chalk.default.bold("Detected(".concat(event,"): ").concat(_chalk.default.blue(relativePath))));return[4,this.syncer.syncFromWatcher([filePath])];case 1:_state.sent();this.pendingFiles=this.pendingFiles.slice(1);if(!(this.pendingFiles.length===0))return[3,3];return[4,this.finishHMR()];case 2:_state.sent();_state.label=3;case 3:return[2]}})}).call(this)}},{key:"finishHMR",value:function finishHMR(){return _async_to_generator(function(){var _,_1,endTime,totalTime,msg,margin;return _ts_generator(this,function(_state){switch(_state.label){case 0:_1=(_=this.syncer).saveChecksums;return[4,this.syncer.getCurrentChecksums()];case 1:return[4,_1.apply(_,[_state.sent()])];case 2:_state.sent();endTime=Date.now();totalTime=endTime-this.hmrStartTime;msg="HMR Done! ".concat(_chalk.default.bold.white("".concat(totalTime,"ms")));margin=Math.max(0,(process.stdout.columns-msg.length)/2);console.log(_chalk.default.black.bgGreen(" ".repeat(margin)+msg+" ".repeat(margin)));return[2]}})}).call(this)}},{key:"destroy",value:function destroy(){return _async_to_generator(function(){var _this_watcher,_this_storage,BaseModel;return _ts_generator(this,function(_state){switch(_state.label){case 0:BaseModel=require("../database/base-model").BaseModel;return[4,BaseModel.destroy()];case 1:_state.sent();return[4,(_this_watcher=this.watcher)===null||_this_watcher===void 0?void 0:_this_watcher.close()];case 2:_state.sent();(_this_storage=this.storage)===null||_this_storage===void 0?void 0:_this_storage.destroy();return[2]}})}).call(this)}}]);return SonamuClass}();var Sonamu=new SonamuClass;
2
2
  //# sourceMappingURL=sonamu.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/api/sonamu.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"async_hooks\";\nimport chalk from \"chalk\";\nimport fastify from \"fastify\";\nimport { readFile } from \"fs/promises\";\nimport path from \"path\";\nimport { exists } from \"../utils/fs-utils\";\n\nimport type { FSWatcher } from \"chokidar\";\nimport { formatInTimeZone } from \"date-fns-tz\";\nimport type { FastifyInstance, FastifyReply, FastifyRequest } from \"fastify\";\nimport type { IncomingMessage, Server, ServerResponse } from \"http\";\nimport { ZodError, ZodObject } from \"zod\";\nimport { DB, SonamuDBConfig } from \"../database/db\";\nimport { attachOnDuplicateUpdate } from \"../database/knex-plugins/knex-on-duplicate-update\";\nimport {\n BadRequestException,\n NotFoundException,\n} from \"../exceptions/so-exceptions\";\nimport type { Driver } from \"../file-storage/driver\";\nimport { createSSEFactory } from \"../stream/sse\";\nimport type { Syncer } from \"../syncer/syncer\";\nimport {\n ApiParamType,\n SonamuFastifyConfig,\n SonamuServerOptions,\n} from \"../types/types\";\nimport { isLocal, isTest } from \"../utils/controller\";\nimport { findApiRootPath } from \"../utils/utils\";\nimport { humanizeZodError } from \"../utils/zod-error\";\nimport { fastifyCaster } from \"./caster\";\nimport { getZodObjectFromApi } from \"./code-converters\";\nimport type { Context, UploadContext } from \"./context\";\nimport type { ExtendedApi } from \"./decorators\";\n\nexport type SonamuConfig = {\n projectName?: string;\n api: {\n dir: string;\n };\n sync: {\n targets: string[];\n };\n route: {\n prefix: string;\n };\n timezone?: string;\n ui?: {\n port: number;\n };\n};\nexport type SonamuSecrets = {\n [key: string]: string;\n};\nclass SonamuClass {\n public isInitialized: boolean = false;\n public asyncLocalStorage: AsyncLocalStorage<{\n context: Context;\n }> = new AsyncLocalStorage();\n\n public uploadStorage: AsyncLocalStorage<{\n uploadContext: UploadContext;\n }> = new AsyncLocalStorage();\n\n public getContext(): Context {\n const store = this.asyncLocalStorage.getStore();\n if (store?.context) {\n return store.context;\n }\n throw new Error(\"Sonamu cannot find context\");\n }\n\n public getUploadContext(): UploadContext {\n const store = this.uploadStorage.getStore();\n if (store?.uploadContext) {\n return store.uploadContext;\n }\n throw new Error(\n \"Sonamu cannot find upload context. Did you use @upload decorator?\"\n );\n }\n\n private _apiRootPath: string | null = null;\n set apiRootPath(apiRootPath: string) {\n this._apiRootPath = apiRootPath;\n }\n get apiRootPath(): string {\n if (this._apiRootPath === null) {\n throw new Error(\"Sonamu has not been initialized\");\n }\n return this._apiRootPath!;\n }\n get appRootPath(): string {\n return this.apiRootPath.split(path.sep).slice(0, -1).join(path.sep);\n }\n\n private _dbConfig: SonamuDBConfig | null = null;\n set dbConfig(dbConfig: SonamuDBConfig) {\n this._dbConfig = dbConfig;\n }\n get dbConfig(): SonamuDBConfig {\n if (this._dbConfig === null) {\n throw new Error(\"Sonamu has not been initialized\");\n }\n return this._dbConfig!;\n }\n\n private _syncer: Syncer | null = null;\n set syncer(syncer: Syncer) {\n this._syncer = syncer;\n }\n get syncer(): Syncer {\n if (this._syncer === null) {\n throw new Error(\"Sonamu has not been initialized\");\n }\n return this._syncer!;\n }\n\n private _config: SonamuConfig | null = null;\n set config(config: SonamuConfig) {\n this._config = config;\n }\n get config(): SonamuConfig {\n if (this._config === null) {\n throw new Error(\"Sonamu has not been initialized\");\n }\n return this._config;\n }\n\n private _secrets: SonamuSecrets | null = null;\n set secrets(secrets: SonamuSecrets) {\n this._secrets = secrets;\n }\n get secrets(): SonamuSecrets | null {\n return this._secrets;\n }\n\n private _storage: Driver | null = null;\n set storage(storage: Driver) {\n this._storage = storage;\n }\n get storage(): Driver | null {\n return this._storage;\n }\n\n // HMR 처리\n public watcher: FSWatcher | null = null;\n private pendingFiles: string[] = [];\n private hmrStartTime: number = 0;\n\n public server: FastifyInstance | null = null;\n\n async initForTesting() {\n await this.init(true, false, undefined, true);\n }\n\n async init(\n doSilent: boolean = false,\n enableSync: boolean = true,\n apiRootPath?: string,\n forTesting: boolean = false\n ) {\n if (this.isInitialized) {\n return;\n }\n !doSilent &&\n console.time(\n chalk.cyan(`Sonamu.init${forTesting ? \" for testing\" : \"\"}`)\n );\n\n // API 루트 패스\n this.apiRootPath = apiRootPath ?? findApiRootPath();\n const configPath = path.join(this.apiRootPath, \"sonamu.config.json\");\n const secretsPath = path.join(this.apiRootPath, \"sonamu.secrets.json\");\n if (!(await exists(configPath))) {\n throw new Error(`Cannot find sonamu.config.json in ${configPath}`);\n }\n this.config = JSON.parse(\n (await readFile(configPath)).toString()\n ) as SonamuConfig;\n if (await exists(secretsPath)) {\n this.secrets = JSON.parse(\n (await readFile(secretsPath)).toString()\n ) as SonamuSecrets;\n }\n\n // DB 로드\n this.dbConfig = await DB.readKnexfile();\n !doSilent && console.log(chalk.green(\"DB Config Loaded!\"));\n attachOnDuplicateUpdate();\n\n // 테스팅인 경우 엔티티 로드 & 싱크 없이 중단\n if (forTesting) {\n this.isInitialized = true;\n return;\n }\n\n // Entity 로드\n const { EntityManager } = await import(\"../entity/entity-manager\");\n await EntityManager.autoload(doSilent);\n\n // Syncer\n const { Syncer } = await import(\"../syncer/syncer\");\n this.syncer = new Syncer();\n\n // Autoload: Models / Types / APIs\n await this.syncer.autoloadModels();\n await this.syncer.autoloadTypes();\n await this.syncer.autoloadApis();\n\n if (isLocal() && !isTest() && enableSync) {\n await this.syncer.sync();\n\n // FIXME: hmr 설정된 경우만 워처 시작\n this.startWatcher();\n\n this.syncer.syncUI();\n }\n\n this.isInitialized = true;\n !doSilent && console.timeEnd(chalk.cyan(\"Sonamu.init\"));\n }\n\n async createServer(\n options: SonamuServerOptions,\n initOptions?: {\n enableSync?: boolean;\n doSilent?: boolean;\n }\n ) {\n const server = fastify(options.fastify);\n this.server = server;\n\n // Storage 설정 저장\n if (options.storage) {\n this.storage = options.storage;\n }\n\n // 플러그인 등록\n if (options.plugins) {\n this.registerPlugins(server, options.plugins);\n }\n\n // API 라우팅 설정\n await this.withFastify(server, options.apiConfig, {\n enableSync: initOptions?.enableSync,\n doSilent: initOptions?.doSilent,\n });\n\n // 서버 시작\n await this.boot(server, options);\n\n return server;\n }\n\n async withFastify(\n server: FastifyInstance<Server, IncomingMessage, ServerResponse>,\n config: SonamuFastifyConfig,\n options?: {\n enableSync?: boolean;\n doSilent?: boolean;\n }\n ) {\n if (this.isInitialized === false) {\n await this.init(options?.doSilent, options?.enableSync);\n }\n\n this.server = server;\n\n // timezone 설정\n const timezone = this.config.timezone;\n if (timezone) {\n const DATE_FORMAT = \"yyyy-MM-dd'T'HH:mm:ssXXX\";\n // ISO 8601 날짜 형식 정규식 (예: 2024-01-15T09:30:00.000Z)\n const ISO_DATE_REGEX = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z$/;\n\n server.setReplySerializer((payload) => {\n return JSON.stringify(payload, (_key, value) => {\n if (typeof value === \"string\" && ISO_DATE_REGEX.test(value)) {\n return formatInTimeZone(new Date(value), timezone, DATE_FORMAT);\n }\n return value;\n });\n });\n !options?.doSilent &&\n console.log(chalk.green(`Timezone set to ${timezone}`));\n }\n\n // 전체 라우팅 리스트\n server.get(\n `${this.config.route.prefix}/routes`,\n async (_request, _reply): Promise<any> => {\n return this.syncer.apis;\n }\n );\n\n // Healthcheck API\n server.get(\n `${this.config.route.prefix}/healthcheck`,\n async (_request, _reply): Promise<string> => {\n return \"ok\";\n }\n );\n\n // API 라우팅 (로컬HMR 상태와 구분)\n if (isLocal()) {\n server.all(\"*\", (request, reply) => {\n const found = this.syncer.apis.find(\n (api) =>\n this.config.route.prefix + api.path === request.url.split(\"?\")[0] &&\n (api.options.httpMethod ?? \"GET\") === request.method.toUpperCase()\n );\n if (found) {\n return this.getApiHandler(found, config)(request, reply);\n }\n throw new NotFoundException(\"존재하지 않는 API 접근입니다.\");\n });\n } else {\n this.syncer.apis.map((api) => {\n // model\n if (this.syncer.models[api.modelName] === undefined) {\n throw new Error(`정의되지 않은 모델에 접근 ${api.modelName}`);\n }\n\n // route\n server.route({\n method: api.options.httpMethod!,\n url: this.config.route.prefix + api.path,\n handler: this.getApiHandler(api, config),\n }); // END server.route\n });\n }\n }\n\n getApiHandler(api: ExtendedApi, config: SonamuFastifyConfig) {\n return async (\n request: FastifyRequest,\n reply: FastifyReply\n ): Promise<unknown> => {\n (api.options.guards ?? []).every((guard) =>\n config.guardHandler(guard, request, api)\n );\n\n // 파라미터 정보로 zod 스키마 빌드\n const ReqType = getZodObjectFromApi(api, this.syncer.types);\n\n // request 파싱\n const which = api.options.httpMethod === \"GET\" ? \"query\" : \"body\";\n let reqBody: {\n [key: string]: unknown;\n };\n try {\n reqBody = fastifyCaster(ReqType).parse(request[which] ?? {});\n } catch (e) {\n if (e instanceof ZodError) {\n const messages = humanizeZodError(e)\n .map((issue) => issue.message)\n .join(\" \");\n throw new BadRequestException(messages, {\n zodError: e,\n });\n } else {\n throw e;\n }\n }\n\n // Content-Type\n reply.type(api.options.contentType ?? \"application/json\");\n\n // 캐시\n const { cacheKey, cacheTtl, cachedData } = await (async () => {\n if (config.cache) {\n try {\n const cacheKeyRes = config.cache.resolveKey(api.path, reqBody);\n if (cacheKeyRes.cache === false) {\n return { cacheKey: null, cachedData: null };\n }\n\n const cacheKey = cacheKeyRes.key;\n const cacheTtl = cacheKeyRes.ttl;\n const cachedData = await config.cache.get(cacheKey);\n return { cacheKey, cacheTtl, cachedData };\n } catch (e) {\n console.error(e);\n }\n return { cacheKey: null, cachedData: null };\n }\n return { cacheKey: null, cachedData: null };\n })();\n if (cachedData !== null) {\n return cachedData;\n }\n\n // createSSEFactory 함수에 미리 request의 socket과 reply를 바인딩.\n const createSSE = (<T extends ZodObject>(\n _request: FastifyRequest,\n _reply: FastifyReply,\n _events: T\n ) => createSSEFactory(_request.socket, _reply, _events)).bind(\n null,\n request,\n reply\n );\n\n // 결과 (AsyncLocalStorage 적용)\n const context: Context = {\n ...config.contextProvider(\n {\n request,\n reply,\n headers: request.headers,\n createSSE,\n },\n request,\n reply\n ),\n };\n\n const model = this.syncer.models[api.modelName];\n return this.asyncLocalStorage.run({ context }, async () => {\n const result = await (model as any)[api.methodName].apply(\n model,\n api.parameters.map((param) => {\n // Context 인젝션\n if (ApiParamType.isContext(param.type)) {\n return context;\n } else {\n return reqBody[param.name];\n }\n })\n );\n reply.type(api.options.contentType ?? \"application/json\");\n\n // 캐시 키 있는 경우 갱신 후 저장\n if (config.cache && cacheKey) {\n await config.cache.put(cacheKey, result, cacheTtl);\n }\n return result;\n });\n };\n }\n\n startWatcher(): void {\n const watchPath = path.join(this.apiRootPath, \"src\");\n const chokidar = require(\"chokidar\") as typeof import(\"chokidar\");\n this.watcher = chokidar.watch(watchPath, {\n ignored: (path, stats) =>\n (!!stats?.isFile() &&\n !path.endsWith(\".ts\") &&\n !path.endsWith(\".json\")) ||\n path.endsWith(\"src/index.ts\"),\n persistent: true,\n ignoreInitial: true,\n });\n this.watcher.on(\"all\", async (event: string, filePath: string) => {\n if (event !== \"change\" && event !== \"add\") {\n return;\n }\n\n try {\n await this.handleFileChange(event, filePath);\n } catch (e) {\n console.error(e);\n }\n });\n }\n\n /*\n A function that automatically handles init and destroy when using Sonamu via scripts. \n */\n async runScript(fn: () => Promise<void>) {\n await this.init(true, false, undefined, false);\n try {\n await fn();\n } finally {\n await this.destroy();\n }\n }\n\n private registerPlugins(\n server: FastifyInstance,\n plugins: SonamuServerOptions[\"plugins\"]\n ) {\n if (!plugins) {\n return;\n }\n\n const pluginsModules = {\n cors: \"@fastify/cors\",\n formbody: \"@fastify/formbody\",\n multipart: \"@fastify/multipart\",\n qs: \"fastify-qs\",\n sse: \"fastify-sse-v2\",\n } as const;\n\n const registerPlugin = <K extends keyof NonNullable<typeof plugins>>(\n key: K,\n pluginName: string\n ) => {\n const option = plugins[key];\n if (!option) return;\n\n if (option === true) {\n server.register(import(pluginName));\n } else {\n server.register(import(pluginName), option);\n }\n };\n\n Object.entries(pluginsModules).forEach(([key, pluginName]) => {\n registerPlugin(key as keyof typeof plugins, pluginName);\n });\n\n if (plugins.custom) {\n plugins.custom(server);\n }\n }\n\n private async boot(server: FastifyInstance, options: SonamuServerOptions) {\n const port = options.listen?.port ?? 3000;\n const host = options.listen?.host ?? \"localhost\";\n\n server.addHook(\"onClose\", async () => {\n await options.lifecycle?.onShutdown?.(server);\n await this.destroy();\n });\n\n const shutdown = async () => {\n try {\n await server.close();\n process.exit(0);\n } catch (err) {\n console.error(\"Error during shutdown:\", err);\n process.exit(1);\n }\n };\n\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n\n if (options.lifecycle?.onError) {\n server.setErrorHandler(options.lifecycle?.onError);\n }\n\n server\n .listen({ port, host })\n .then(async () => {\n await options.lifecycle?.onStart?.(server);\n })\n .catch(async (err) => {\n console.error(chalk.red(\"Failed to start server:\", err));\n await shutdown();\n });\n }\n\n private async handleFileChange(\n event: string,\n filePath: string\n ): Promise<void> {\n // 첫 번째 파일이면 HMR 시작 시간 기록\n if (this.pendingFiles.length === 0) {\n this.hmrStartTime = Date.now();\n }\n\n this.pendingFiles.push(filePath);\n\n const relativePath = filePath.replace(this.apiRootPath, \"api\");\n console.log(chalk.bold(`Detected(${event}): ${chalk.blue(relativePath)}`));\n\n await this.syncer.syncFromWatcher([filePath]);\n\n // 처리 완료된 파일을 대기 목록에서 제거\n this.pendingFiles = this.pendingFiles.slice(1);\n\n // 모든 파일 처리가 완료되면 최종 메시지 출력\n if (this.pendingFiles.length === 0) {\n await this.finishHMR();\n }\n }\n\n private async finishHMR(): Promise<void> {\n await this.syncer.saveChecksums(await this.syncer.getCurrentChecksums());\n\n const endTime = Date.now();\n const totalTime = endTime - this.hmrStartTime;\n const msg = `HMR Done! ${chalk.bold.white(`${totalTime}ms`)}`;\n const margin = Math.max(0, (process.stdout.columns - msg.length) / 2);\n\n console.log(\n chalk.black.bgGreen(\" \".repeat(margin) + msg + \" \".repeat(margin))\n );\n }\n\n async destroy(): Promise<void> {\n const { BaseModel } = require(\"../database/base-model\");\n await BaseModel.destroy();\n await this.watcher?.close();\n this.storage?.destroy();\n }\n}\nexport const Sonamu = new SonamuClass();\n"],"names":["Sonamu","SonamuClass","isInitialized","asyncLocalStorage","AsyncLocalStorage","uploadStorage","_apiRootPath","_dbConfig","_syncer","_config","_secrets","_storage","watcher","pendingFiles","hmrStartTime","server","getContext","store","getStore","context","Error","getUploadContext","uploadContext","apiRootPath","appRootPath","split","path","sep","slice","join","dbConfig","syncer","config","secrets","storage","initForTesting","init","undefined","doSilent","enableSync","forTesting","configPath","secretsPath","EntityManager","Syncer","console","time","chalk","cyan","findApiRootPath","exists","JSON","parse","readFile","toString","DB","readKnexfile","log","green","attachOnDuplicateUpdate","autoload","autoloadModels","autoloadTypes","autoloadApis","isLocal","isTest","sync","startWatcher","syncUI","timeEnd","createServer","options","initOptions","fastify","plugins","registerPlugins","withFastify","apiConfig","boot","timezone","DATE_FORMAT","ISO_DATE_REGEX","setReplySerializer","payload","stringify","_key","value","test","formatInTimeZone","Date","get","route","prefix","_request","_reply","apis","all","request","reply","found","find","api","url","httpMethod","method","toUpperCase","getApiHandler","NotFoundException","map","models","modelName","handler","ReqType","which","reqBody","messages","cacheKey","cacheTtl","cachedData","createSSE","model","guards","every","guard","guardHandler","getZodObjectFromApi","types","fastifyCaster","e","ZodError","humanizeZodError","issue","message","BadRequestException","zodError","type","contentType","cacheKeyRes","cache","resolveKey","key","ttl","error","_events","createSSEFactory","socket","bind","contextProvider","headers","run","result","methodName","apply","parameters","param","ApiParamType","isContext","name","put","watchPath","chokidar","require","watch","ignored","stats","isFile","endsWith","persistent","ignoreInitial","on","event","filePath","handleFileChange","runScript","fn","destroy","pluginsModules","cors","formbody","multipart","qs","sse","registerPlugin","pluginName","option","register","Object","entries","forEach","custom","port","host","shutdown","listen","addHook","lifecycle","onShutdown","err","close","process","exit","onError","setErrorHandler","then","onStart","catch","red","relativePath","length","now","push","replace","bold","blue","syncFromWatcher","finishHMR","endTime","totalTime","msg","margin","saveChecksums","getCurrentChecksums","white","Math","max","stdout","columns","black","bgGreen","repeat","BaseModel"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/api/sonamu.ts"],"sourcesContent":["import { AsyncLocalStorage } from \"async_hooks\";\nimport chalk from \"chalk\";\nimport fastify from \"fastify\";\nimport { readFile } from \"fs/promises\";\nimport path from \"path\";\nimport { exists } from \"../utils/fs-utils\";\n\nimport type { FSWatcher } from \"chokidar\";\nimport { formatInTimeZone } from \"date-fns-tz\";\nimport type { FastifyInstance, FastifyReply, FastifyRequest } from \"fastify\";\nimport type { IncomingMessage, Server, ServerResponse } from \"http\";\nimport { ZodError, ZodObject } from \"zod\";\nimport { DB, SonamuDBConfig } from \"../database/db\";\nimport { attachOnDuplicateUpdate } from \"../database/knex-plugins/knex-on-duplicate-update\";\nimport {\n BadRequestException,\n NotFoundException,\n} from \"../exceptions/so-exceptions\";\nimport type { Driver } from \"../file-storage/driver\";\nimport { createSSEFactory } from \"../stream/sse\";\nimport type { Syncer } from \"../syncer/syncer\";\nimport {\n ApiParamType,\n SonamuFastifyConfig,\n SonamuServerOptions,\n} from \"../types/types\";\nimport { isLocal, isTest } from \"../utils/controller\";\nimport { findApiRootPath } from \"../utils/utils\";\nimport { humanizeZodError } from \"../utils/zod-error\";\nimport { fastifyCaster } from \"./caster\";\nimport { getZodObjectFromApi } from \"./code-converters\";\nimport type { AuthContext, Context, UploadContext } from \"./context\";\nimport type { ExtendedApi } from \"./decorators\";\nimport fastifyPassport from \"@fastify/passport\";\n\nexport type SonamuConfig = {\n projectName?: string;\n api: {\n dir: string;\n };\n sync: {\n targets: string[];\n };\n route: {\n prefix: string;\n };\n timezone?: string;\n ui?: {\n port: number;\n };\n};\nexport type SonamuSecrets = {\n [key: string]: string;\n};\nclass SonamuClass {\n public isInitialized: boolean = false;\n public asyncLocalStorage: AsyncLocalStorage<{\n context: Context;\n }> = new AsyncLocalStorage();\n\n public uploadStorage: AsyncLocalStorage<{\n uploadContext: UploadContext;\n }> = new AsyncLocalStorage();\n\n public getContext(): Context {\n const store = this.asyncLocalStorage.getStore();\n if (store?.context) {\n return store.context;\n }\n throw new Error(\"Sonamu cannot find context\");\n }\n\n public getUploadContext(): UploadContext {\n const store = this.uploadStorage.getStore();\n if (store?.uploadContext) {\n return store.uploadContext;\n }\n throw new Error(\n \"Sonamu cannot find upload context. Did you use @upload decorator?\"\n );\n }\n\n private _apiRootPath: string | null = null;\n set apiRootPath(apiRootPath: string) {\n this._apiRootPath = apiRootPath;\n }\n get apiRootPath(): string {\n if (this._apiRootPath === null) {\n throw new Error(\"Sonamu has not been initialized\");\n }\n return this._apiRootPath!;\n }\n get appRootPath(): string {\n return this.apiRootPath.split(path.sep).slice(0, -1).join(path.sep);\n }\n\n private _dbConfig: SonamuDBConfig | null = null;\n set dbConfig(dbConfig: SonamuDBConfig) {\n this._dbConfig = dbConfig;\n }\n get dbConfig(): SonamuDBConfig {\n if (this._dbConfig === null) {\n throw new Error(\"Sonamu has not been initialized\");\n }\n return this._dbConfig!;\n }\n\n private _syncer: Syncer | null = null;\n set syncer(syncer: Syncer) {\n this._syncer = syncer;\n }\n get syncer(): Syncer {\n if (this._syncer === null) {\n throw new Error(\"Sonamu has not been initialized\");\n }\n return this._syncer!;\n }\n\n private _config: SonamuConfig | null = null;\n set config(config: SonamuConfig) {\n this._config = config;\n }\n get config(): SonamuConfig {\n if (this._config === null) {\n throw new Error(\"Sonamu has not been initialized\");\n }\n return this._config;\n }\n\n private _secrets: SonamuSecrets | null = null;\n set secrets(secrets: SonamuSecrets) {\n this._secrets = secrets;\n }\n get secrets(): SonamuSecrets | null {\n return this._secrets;\n }\n\n private _storage: Driver | null = null;\n set storage(storage: Driver) {\n this._storage = storage;\n }\n get storage(): Driver | null {\n return this._storage;\n }\n\n // HMR 처리\n public watcher: FSWatcher | null = null;\n private pendingFiles: string[] = [];\n private hmrStartTime: number = 0;\n\n public server: FastifyInstance | null = null;\n\n async initForTesting() {\n await this.init(true, false, undefined, true);\n }\n\n async init(\n doSilent: boolean = false,\n enableSync: boolean = true,\n apiRootPath?: string,\n forTesting: boolean = false\n ) {\n if (this.isInitialized) {\n return;\n }\n !doSilent &&\n console.time(\n chalk.cyan(`Sonamu.init${forTesting ? \" for testing\" : \"\"}`)\n );\n\n // API 루트 패스\n this.apiRootPath = apiRootPath ?? findApiRootPath();\n const configPath = path.join(this.apiRootPath, \"sonamu.config.json\");\n const secretsPath = path.join(this.apiRootPath, \"sonamu.secrets.json\");\n if (!(await exists(configPath))) {\n throw new Error(`Cannot find sonamu.config.json in ${configPath}`);\n }\n this.config = JSON.parse(\n (await readFile(configPath)).toString()\n ) as SonamuConfig;\n if (await exists(secretsPath)) {\n this.secrets = JSON.parse(\n (await readFile(secretsPath)).toString()\n ) as SonamuSecrets;\n }\n\n // DB 로드\n this.dbConfig = await DB.readKnexfile();\n !doSilent && console.log(chalk.green(\"DB Config Loaded!\"));\n attachOnDuplicateUpdate();\n\n // 테스팅인 경우 엔티티 로드 & 싱크 없이 중단\n if (forTesting) {\n this.isInitialized = true;\n return;\n }\n\n // Entity 로드\n const { EntityManager } = await import(\"../entity/entity-manager\");\n await EntityManager.autoload(doSilent);\n\n // Syncer\n const { Syncer } = await import(\"../syncer/syncer\");\n this.syncer = new Syncer();\n\n // Autoload: Models / Types / APIs\n await this.syncer.autoloadModels();\n await this.syncer.autoloadTypes();\n await this.syncer.autoloadApis();\n\n if (isLocal() && !isTest() && enableSync) {\n await this.syncer.sync();\n\n // FIXME: hmr 설정된 경우만 워처 시작\n this.startWatcher();\n\n this.syncer.syncUI();\n }\n\n this.isInitialized = true;\n !doSilent && console.timeEnd(chalk.cyan(\"Sonamu.init\"));\n }\n\n async createServer(\n options: SonamuServerOptions,\n initOptions?: {\n enableSync?: boolean;\n doSilent?: boolean;\n }\n ) {\n const server = fastify(options.fastify);\n this.server = server;\n\n // Storage 설정 저장\n if (options.storage) {\n this.storage = options.storage;\n }\n\n // 플러그인 등록\n if (options.plugins) {\n this.registerPlugins(server, options.plugins);\n }\n\n if (options.auth) {\n if (!options.plugins?.session) {\n throw new Error(\n \"Auth requires session plugin. Please add plugins.session configuration.\"\n );\n }\n\n this.registerAuth(server, options.auth);\n }\n\n // API 라우팅 설정\n await this.withFastify(server, options.apiConfig, {\n enableSync: initOptions?.enableSync,\n doSilent: initOptions?.doSilent,\n });\n\n // 서버 시작\n await this.boot(server, options);\n\n return server;\n }\n\n async withFastify(\n server: FastifyInstance<Server, IncomingMessage, ServerResponse>,\n config: SonamuFastifyConfig,\n options?: {\n enableSync?: boolean;\n doSilent?: boolean;\n }\n ) {\n if (this.isInitialized === false) {\n await this.init(options?.doSilent, options?.enableSync);\n }\n\n this.server = server;\n\n // timezone 설정\n const timezone = this.config.timezone;\n if (timezone) {\n const DATE_FORMAT = \"yyyy-MM-dd'T'HH:mm:ssXXX\";\n // ISO 8601 날짜 형식 정규식 (예: 2024-01-15T09:30:00.000Z)\n const ISO_DATE_REGEX = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z$/;\n\n server.setReplySerializer((payload) => {\n return JSON.stringify(payload, (_key, value) => {\n if (typeof value === \"string\" && ISO_DATE_REGEX.test(value)) {\n return formatInTimeZone(new Date(value), timezone, DATE_FORMAT);\n }\n return value;\n });\n });\n !options?.doSilent &&\n console.log(chalk.green(`Timezone set to ${timezone}`));\n }\n\n // 전체 라우팅 리스트\n server.get(\n `${this.config.route.prefix}/routes`,\n async (_request, _reply): Promise<any> => {\n return this.syncer.apis;\n }\n );\n\n // Healthcheck API\n server.get(\n `${this.config.route.prefix}/healthcheck`,\n async (_request, _reply): Promise<string> => {\n return \"ok\";\n }\n );\n\n // API 라우팅 (로컬HMR 상태와 구분)\n if (isLocal()) {\n server.all(\"*\", (request, reply) => {\n const found = this.syncer.apis.find(\n (api) =>\n this.config.route.prefix + api.path === request.url.split(\"?\")[0] &&\n (api.options.httpMethod ?? \"GET\") === request.method.toUpperCase()\n );\n if (found) {\n return this.getApiHandler(found, config)(request, reply);\n }\n throw new NotFoundException(\"존재하지 않는 API 접근입니다.\");\n });\n } else {\n this.syncer.apis.map((api) => {\n // model\n if (this.syncer.models[api.modelName] === undefined) {\n throw new Error(`정의되지 않은 모델에 접근 ${api.modelName}`);\n }\n\n // route\n server.route({\n method: api.options.httpMethod!,\n url: this.config.route.prefix + api.path,\n handler: this.getApiHandler(api, config),\n }); // END server.route\n });\n }\n }\n\n getApiHandler(api: ExtendedApi, config: SonamuFastifyConfig) {\n return async (\n request: FastifyRequest,\n reply: FastifyReply\n ): Promise<unknown> => {\n (api.options.guards ?? []).every((guard) =>\n config.guardHandler(guard, request, api)\n );\n\n // 파라미터 정보로 zod 스키마 빌드\n const ReqType = getZodObjectFromApi(api, this.syncer.types);\n\n // request 파싱\n const which = api.options.httpMethod === \"GET\" ? \"query\" : \"body\";\n let reqBody: {\n [key: string]: unknown;\n };\n try {\n reqBody = fastifyCaster(ReqType).parse(request[which] ?? {});\n } catch (e) {\n if (e instanceof ZodError) {\n const messages = humanizeZodError(e)\n .map((issue) => issue.message)\n .join(\" \");\n throw new BadRequestException(messages, {\n zodError: e,\n });\n } else {\n throw e;\n }\n }\n\n // Content-Type\n reply.type(api.options.contentType ?? \"application/json\");\n\n // 캐시\n const { cacheKey, cacheTtl, cachedData } = await (async () => {\n if (config.cache) {\n try {\n const cacheKeyRes = config.cache.resolveKey(api.path, reqBody);\n if (cacheKeyRes.cache === false) {\n return { cacheKey: null, cachedData: null };\n }\n\n const cacheKey = cacheKeyRes.key;\n const cacheTtl = cacheKeyRes.ttl;\n const cachedData = await config.cache.get(cacheKey);\n return { cacheKey, cacheTtl, cachedData };\n } catch (e) {\n console.error(e);\n }\n return { cacheKey: null, cachedData: null };\n }\n return { cacheKey: null, cachedData: null };\n })();\n if (cachedData !== null) {\n return cachedData;\n }\n\n // createSSEFactory 함수에 미리 request의 socket과 reply를 바인딩.\n const createSSE = (<T extends ZodObject>(\n _request: FastifyRequest,\n _reply: FastifyReply,\n _events: T\n ) => createSSEFactory(_request.socket, _reply, _events)).bind(\n null,\n request,\n reply\n );\n\n const context: Context = {\n ...config.contextProvider(\n {\n request,\n reply,\n headers: request.headers,\n createSSE,\n\n // auth\n user: request.user ?? null,\n passport: {\n login: request.login.bind(\n request\n ) as AuthContext[\"passport\"][\"login\"],\n logout: request.logout.bind(\n request\n ) as AuthContext[\"passport\"][\"logout\"],\n },\n },\n request,\n reply\n ),\n };\n\n const model = this.syncer.models[api.modelName];\n return this.asyncLocalStorage.run({ context }, async () => {\n const result = await (model as any)[api.methodName].apply(\n model,\n api.parameters.map((param) => {\n // Context 인젝션\n if (ApiParamType.isContext(param.type)) {\n return context;\n } else {\n return reqBody[param.name];\n }\n })\n );\n reply.type(api.options.contentType ?? \"application/json\");\n\n // 캐시 키 있는 경우 갱신 후 저장\n if (config.cache && cacheKey) {\n await config.cache.put(cacheKey, result, cacheTtl);\n }\n return result;\n });\n };\n }\n\n startWatcher(): void {\n const watchPath = path.join(this.apiRootPath, \"src\");\n const chokidar = require(\"chokidar\") as typeof import(\"chokidar\");\n this.watcher = chokidar.watch(watchPath, {\n ignored: (path, stats) =>\n (!!stats?.isFile() &&\n !path.endsWith(\".ts\") &&\n !path.endsWith(\".json\")) ||\n path.endsWith(\"src/index.ts\"),\n persistent: true,\n ignoreInitial: true,\n });\n this.watcher.on(\"all\", async (event: string, filePath: string) => {\n if (event !== \"change\" && event !== \"add\") {\n return;\n }\n\n try {\n await this.handleFileChange(event, filePath);\n } catch (e) {\n console.error(e);\n }\n });\n }\n\n /*\n A function that automatically handles init and destroy when using Sonamu via scripts. \n */\n async runScript(fn: () => Promise<void>) {\n await this.init(true, false, undefined, false);\n try {\n await fn();\n } finally {\n await this.destroy();\n }\n }\n\n private registerPlugins(\n server: FastifyInstance,\n plugins: SonamuServerOptions[\"plugins\"]\n ) {\n if (!plugins) {\n return;\n }\n\n const pluginsModules = {\n cors: \"@fastify/cors\",\n formbody: \"@fastify/formbody\",\n multipart: \"@fastify/multipart\",\n qs: \"fastify-qs\",\n sse: \"fastify-sse-v2\",\n static: \"@fastify/static\",\n session: \"@fastify/secure-session\",\n } as const;\n\n const registerPlugin = <K extends keyof NonNullable<typeof plugins>>(\n key: K,\n pluginName: string\n ) => {\n const option = plugins[key];\n if (!option) return;\n\n if (option === true) {\n server.register(import(pluginName));\n } else {\n server.register(import(pluginName), option);\n }\n };\n\n Object.entries(pluginsModules).forEach(([key, pluginName]) => {\n registerPlugin(key as keyof typeof plugins, pluginName);\n });\n\n if (plugins.custom) {\n plugins.custom(server);\n }\n }\n\n private async registerAuth(\n server: FastifyInstance,\n options: NonNullable<SonamuServerOptions[\"auth\"]>\n ) {\n server.register(fastifyPassport.initialize());\n server.register(fastifyPassport.secureSession());\n\n if (typeof options === \"boolean\") {\n fastifyPassport.registerUserSerializer(async (user, _request) => user);\n fastifyPassport.registerUserDeserializer(\n async (serialized, _request) => serialized\n );\n } else {\n fastifyPassport.registerUserSerializer(options.userSerializer);\n fastifyPassport.registerUserDeserializer(options.userDeserializer);\n }\n }\n\n private async boot(server: FastifyInstance, options: SonamuServerOptions) {\n const port = options.listen?.port ?? 3000;\n const host = options.listen?.host ?? \"localhost\";\n\n server.addHook(\"onClose\", async () => {\n await options.lifecycle?.onShutdown?.(server);\n await this.destroy();\n });\n\n const shutdown = async () => {\n try {\n await server.close();\n process.exit(0);\n } catch (err) {\n console.error(\"Error during shutdown:\", err);\n process.exit(1);\n }\n };\n\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n\n if (options.lifecycle?.onError) {\n server.setErrorHandler(options.lifecycle?.onError);\n }\n\n server\n .listen({ port, host })\n .then(async () => {\n await options.lifecycle?.onStart?.(server);\n })\n .catch(async (err) => {\n console.error(chalk.red(\"Failed to start server:\", err));\n await shutdown();\n });\n }\n\n private async handleFileChange(\n event: string,\n filePath: string\n ): Promise<void> {\n // 첫 번째 파일이면 HMR 시작 시간 기록\n if (this.pendingFiles.length === 0) {\n this.hmrStartTime = Date.now();\n }\n\n this.pendingFiles.push(filePath);\n\n const relativePath = filePath.replace(this.apiRootPath, \"api\");\n console.log(chalk.bold(`Detected(${event}): ${chalk.blue(relativePath)}`));\n\n await this.syncer.syncFromWatcher([filePath]);\n\n // 처리 완료된 파일을 대기 목록에서 제거\n this.pendingFiles = this.pendingFiles.slice(1);\n\n // 모든 파일 처리가 완료되면 최종 메시지 출력\n if (this.pendingFiles.length === 0) {\n await this.finishHMR();\n }\n }\n\n private async finishHMR(): Promise<void> {\n await this.syncer.saveChecksums(await this.syncer.getCurrentChecksums());\n\n const endTime = Date.now();\n const totalTime = endTime - this.hmrStartTime;\n const msg = `HMR Done! ${chalk.bold.white(`${totalTime}ms`)}`;\n const margin = Math.max(0, (process.stdout.columns - msg.length) / 2);\n\n console.log(\n chalk.black.bgGreen(\" \".repeat(margin) + msg + \" \".repeat(margin))\n );\n }\n\n async destroy(): Promise<void> {\n const { BaseModel } = require(\"../database/base-model\");\n await BaseModel.destroy();\n await this.watcher?.close();\n this.storage?.destroy();\n }\n}\nexport const Sonamu = new SonamuClass();\n"],"names":["Sonamu","SonamuClass","isInitialized","asyncLocalStorage","AsyncLocalStorage","uploadStorage","_apiRootPath","_dbConfig","_syncer","_config","_secrets","_storage","watcher","pendingFiles","hmrStartTime","server","getContext","store","getStore","context","Error","getUploadContext","uploadContext","apiRootPath","appRootPath","split","path","sep","slice","join","dbConfig","syncer","config","secrets","storage","initForTesting","init","undefined","doSilent","enableSync","forTesting","configPath","secretsPath","EntityManager","Syncer","console","time","chalk","cyan","findApiRootPath","exists","JSON","parse","readFile","toString","DB","readKnexfile","log","green","attachOnDuplicateUpdate","autoload","autoloadModels","autoloadTypes","autoloadApis","isLocal","isTest","sync","startWatcher","syncUI","timeEnd","createServer","options","initOptions","fastify","plugins","registerPlugins","auth","session","registerAuth","withFastify","apiConfig","boot","timezone","DATE_FORMAT","ISO_DATE_REGEX","setReplySerializer","payload","stringify","_key","value","test","formatInTimeZone","Date","get","route","prefix","_request","_reply","apis","all","request","reply","found","find","api","url","httpMethod","method","toUpperCase","getApiHandler","NotFoundException","map","models","modelName","handler","ReqType","which","reqBody","messages","cacheKey","cacheTtl","cachedData","createSSE","model","guards","every","guard","guardHandler","getZodObjectFromApi","types","fastifyCaster","e","ZodError","humanizeZodError","issue","message","BadRequestException","zodError","type","contentType","cacheKeyRes","cache","resolveKey","key","ttl","error","_events","createSSEFactory","socket","bind","contextProvider","headers","user","passport","login","logout","run","result","methodName","apply","parameters","param","ApiParamType","isContext","name","put","watchPath","chokidar","require","watch","ignored","stats","isFile","endsWith","persistent","ignoreInitial","on","event","filePath","handleFileChange","runScript","fn","destroy","pluginsModules","cors","formbody","multipart","qs","sse","static","registerPlugin","pluginName","option","register","Object","entries","forEach","custom","fastifyPassport","initialize","secureSession","registerUserSerializer","registerUserDeserializer","serialized","userSerializer","userDeserializer","port","host","shutdown","listen","addHook","lifecycle","onShutdown","err","close","process","exit","onError","setErrorHandler","then","onStart","catch","red","relativePath","length","now","push","replace","bold","blue","syncFromWatcher","finishHMR","endTime","totalTime","msg","margin","saveChecksums","getCurrentChecksums","white","Math","max","stdout","columns","black","bgGreen","repeat","BaseModel"],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env ts-node
2
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});var _child_process=require("child_process");var _path=require("path");var _fs=require("fs");var _chalk=/*#__PURE__*/_interop_require_default(require("chalk"));var _buildconfig=require("./build-config");function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _array_without_holes(arr){if(Array.isArray(arr))return _array_like_to_array(arr)}function _interop_require_default(obj){return obj&&obj.__esModule?obj:{default:obj}}function _iterable_to_array(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _non_iterable_spread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _to_consumable_array(arr){return _array_without_holes(arr)||_iterable_to_array(arr)||_unsupported_iterable_to_array(arr)||_non_iterable_spread()}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o==="string")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}var scriptPath=(0,_path.resolve)(__dirname,"cli.js");var args=process.argv.slice(2);function build(){var checkTypes=arguments.length>0&&arguments[0]!==void 0?arguments[0]:false;try{(0,_child_process.execSync)(_buildconfig.SWC_BUILD_COMMAND,{cwd:process.cwd(),stdio:"inherit"})}catch(error){console.error(_chalk.default.red("Build failed."),error);process.exit(1)}if(checkTypes){try{console.log(_chalk.default.blue("Checking types with tsc..."));(0,_child_process.execSync)(_buildconfig.TSC_TYPE_CHECK_COMMAND,{cwd:process.cwd(),stdio:"inherit"})}catch(error){console.error(_chalk.default.red("Type check failed."),error);process.exit(1)}}}if(args[0]==="build"){console.log(_chalk.default.blue("Building the project..."));build(true);console.log(_chalk.default.green("Build completed successfully."));process.exit(0)}if(args[0]==="dev:serve"){build()}if(!(0,_fs.existsSync)(scriptPath)){console.error("Error: Script not found at ".concat(scriptPath));process.exit(1)}var result=(0,_child_process.spawnSync)(process.execPath,["--no-warnings",scriptPath].concat(_to_consumable_array(args)),{stdio:"inherit"});var _result_status;process.exit((_result_status=result.status)!==null&&_result_status!==void 0?_result_status:1);
2
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});var _child_process=require("child_process");var _path=require("path");var _fs=require("fs");var _chalk=/*#__PURE__*/_interop_require_default(require("chalk"));var _buildconfig=require("./build-config");function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _array_without_holes(arr){if(Array.isArray(arr))return _array_like_to_array(arr)}function _interop_require_default(obj){return obj&&obj.__esModule?obj:{default:obj}}function _iterable_to_array(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}function _non_iterable_spread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _to_consumable_array(arr){return _array_without_holes(arr)||_iterable_to_array(arr)||_unsupported_iterable_to_array(arr)||_non_iterable_spread()}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o==="string")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}var scriptPath=(0,_path.resolve)(__dirname,"cli.js");var args=process.argv.slice(2);function build(){var checkTypes=arguments.length>0&&arguments[0]!==void 0?arguments[0]:false;try{(0,_child_process.execSync)(_buildconfig.SWC_BUILD_COMMAND,{cwd:process.cwd(),stdio:"inherit"})}catch(error){console.error(_chalk.default.red("Build failed."),error);process.exit(1)}if(checkTypes){try{console.log(_chalk.default.blue("Checking types with tsc..."));(0,_child_process.execSync)(_buildconfig.TSC_TYPE_CHECK_COMMAND,{cwd:process.cwd(),stdio:"inherit"})}catch(error){console.error(_chalk.default.red("Type check failed."),error);process.exit(1)}}}if(args[0]==="build"){console.log(_chalk.default.blue("Building the project..."));build(true);console.log(_chalk.default.green("Build completed successfully."));process.exit(0)}if(args[0]==="dev:serve"){build()}if(!(0,_fs.existsSync)(scriptPath)){console.error("Error: Script not found at ".concat(scriptPath));process.exit(1)}var result=(0,_child_process.spawnSync)(process.execPath,["-r","source-map-support/register","--no-warnings",scriptPath].concat(_to_consumable_array(args)),{stdio:"inherit"});var _result_status;process.exit((_result_status=result.status)!==null&&_result_status!==void 0?_result_status:1);
3
3
  //# sourceMappingURL=cli-wrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/bin/cli-wrapper.ts"],"sourcesContent":["#!/usr/bin/env ts-node\n\nimport { spawnSync, execSync } from \"child_process\";\nimport { resolve } from \"path\";\nimport { existsSync } from \"fs\";\nimport chalk from \"chalk\";\nimport { SWC_BUILD_COMMAND, TSC_TYPE_CHECK_COMMAND } from \"./build-config\";\n\nconst scriptPath = resolve(__dirname, \"cli.js\");\nconst args = process.argv.slice(2);\n\n// build 명령어는 dist 없이도 실행 가능하도록 cli.ts 외부에서 처리(Sonamu.init에서 dist 필요)\nfunction build(checkTypes: boolean = false) {\n try {\n execSync(SWC_BUILD_COMMAND, { cwd: process.cwd(), stdio: \"inherit\" });\n } catch (error) {\n console.error(chalk.red(\"Build failed.\"), error);\n process.exit(1);\n }\n\n if (checkTypes) {\n try {\n console.log(chalk.blue(\"Checking types with tsc...\"));\n execSync(TSC_TYPE_CHECK_COMMAND, { cwd: process.cwd(), stdio: \"inherit\" });\n } catch (error) {\n console.error(chalk.red(\"Type check failed.\"), error);\n process.exit(1);\n }\n }\n}\n\nif (args[0] === \"build\") {\n console.log(chalk.blue(\"Building the project...\"));\n build(true);\n console.log(chalk.green(\"Build completed successfully.\"));\n process.exit(0);\n}\n\nif (args[0] === \"dev:serve\") {\n build();\n}\n\nif (!existsSync(scriptPath)) {\n console.error(`Error: Script not found at ${scriptPath}`);\n process.exit(1);\n}\n\nconst result = spawnSync(\n process.execPath,\n [\"--no-warnings\", scriptPath, ...args],\n {\n stdio: \"inherit\",\n }\n);\n\nprocess.exit(result.status ?? 1);\n"],"names":["scriptPath","resolve","__dirname","args","process","argv","slice","build","checkTypes","execSync","SWC_BUILD_COMMAND","cwd","stdio","error","console","chalk","red","exit","log","blue","TSC_TYPE_CHECK_COMMAND","green","existsSync","result","spawnSync","execPath","status"],"mappings":";iGAEoC,mCACZ,wBACG,+DACT,mCACwC,6rCAE1D,IAAMA,WAAaC,GAAAA,aAAO,EAACC,UAAW,UACtC,IAAMC,KAAOC,QAAQC,IAAI,CAACC,KAAK,CAAC,GAGhC,SAASC,YAAMC,WAAAA,uDAAsB,MACnC,GAAI,CACFC,GAAAA,uBAAQ,EAACC,8BAAiB,CAAE,CAAEC,IAAKP,QAAQO,GAAG,GAAIC,MAAO,SAAU,EACrE,CAAE,MAAOC,MAAO,CACdC,QAAQD,KAAK,CAACE,cAAK,CAACC,GAAG,CAAC,iBAAkBH,OAC1CT,QAAQa,IAAI,CAAC,EACf,CAEA,GAAIT,WAAY,CACd,GAAI,CACFM,QAAQI,GAAG,CAACH,cAAK,CAACI,IAAI,CAAC,+BACvBV,GAAAA,uBAAQ,EAACW,mCAAsB,CAAE,CAAET,IAAKP,QAAQO,GAAG,GAAIC,MAAO,SAAU,EAC1E,CAAE,MAAOC,MAAO,CACdC,QAAQD,KAAK,CAACE,cAAK,CAACC,GAAG,CAAC,sBAAuBH,OAC/CT,QAAQa,IAAI,CAAC,EACf,CACF,CACF,CAEA,GAAId,IAAI,CAAC,EAAE,GAAK,QAAS,CACvBW,QAAQI,GAAG,CAACH,cAAK,CAACI,IAAI,CAAC,4BACvBZ,MAAM,MACNO,QAAQI,GAAG,CAACH,cAAK,CAACM,KAAK,CAAC,kCACxBjB,QAAQa,IAAI,CAAC,EACf,CAEA,GAAId,IAAI,CAAC,EAAE,GAAK,YAAa,CAC3BI,OACF,CAEA,GAAI,CAACe,GAAAA,cAAU,EAACtB,YAAa,CAC3Bc,QAAQD,KAAK,CAAC,AAAC,8BAAwC,OAAXb,aAC5CI,QAAQa,IAAI,CAAC,EACf,CAEA,IAAMM,OAASC,GAAAA,wBAAS,EACtBpB,QAAQqB,QAAQ,CAChB,CAAC,gBAAiBzB,WAAoB,CAAtC,OAA8B,qBAAGG,OACjC,CACES,MAAO,SACT,OAGWW,eAAbnB,QAAQa,IAAI,CAACM,CAAAA,eAAAA,OAAOG,MAAM,UAAbH,wBAAAA,eAAiB"}
1
+ {"version":3,"sources":["../../src/bin/cli-wrapper.ts"],"sourcesContent":["#!/usr/bin/env ts-node\n\nimport { spawnSync, execSync } from \"child_process\";\nimport { resolve } from \"path\";\nimport { existsSync } from \"fs\";\nimport chalk from \"chalk\";\nimport { SWC_BUILD_COMMAND, TSC_TYPE_CHECK_COMMAND } from \"./build-config\";\n\nconst scriptPath = resolve(__dirname, \"cli.js\");\nconst args = process.argv.slice(2);\n\n// build 명령어는 dist 없이도 실행 가능하도록 cli.ts 외부에서 처리(Sonamu.init에서 dist 필요)\nfunction build(checkTypes: boolean = false) {\n try {\n execSync(SWC_BUILD_COMMAND, { cwd: process.cwd(), stdio: \"inherit\" });\n } catch (error) {\n console.error(chalk.red(\"Build failed.\"), error);\n process.exit(1);\n }\n\n if (checkTypes) {\n try {\n console.log(chalk.blue(\"Checking types with tsc...\"));\n execSync(TSC_TYPE_CHECK_COMMAND, { cwd: process.cwd(), stdio: \"inherit\" });\n } catch (error) {\n console.error(chalk.red(\"Type check failed.\"), error);\n process.exit(1);\n }\n }\n}\n\nif (args[0] === \"build\") {\n console.log(chalk.blue(\"Building the project...\"));\n build(true);\n console.log(chalk.green(\"Build completed successfully.\"));\n process.exit(0);\n}\n\nif (args[0] === \"dev:serve\") {\n build();\n}\n\nif (!existsSync(scriptPath)) {\n console.error(`Error: Script not found at ${scriptPath}`);\n process.exit(1);\n}\n\nconst result = spawnSync(\n process.execPath,\n [\"-r\", \"source-map-support/register\", \"--no-warnings\", scriptPath, ...args],\n {\n stdio: \"inherit\",\n }\n);\n\nprocess.exit(result.status ?? 1);\n"],"names":["scriptPath","resolve","__dirname","args","process","argv","slice","build","checkTypes","execSync","SWC_BUILD_COMMAND","cwd","stdio","error","console","chalk","red","exit","log","blue","TSC_TYPE_CHECK_COMMAND","green","existsSync","result","spawnSync","execPath","status"],"mappings":";iGAEoC,mCACZ,wBACG,+DACT,mCACwC,6rCAE1D,IAAMA,WAAaC,GAAAA,aAAO,EAACC,UAAW,UACtC,IAAMC,KAAOC,QAAQC,IAAI,CAACC,KAAK,CAAC,GAGhC,SAASC,YAAMC,WAAAA,uDAAsB,MACnC,GAAI,CACFC,GAAAA,uBAAQ,EAACC,8BAAiB,CAAE,CAAEC,IAAKP,QAAQO,GAAG,GAAIC,MAAO,SAAU,EACrE,CAAE,MAAOC,MAAO,CACdC,QAAQD,KAAK,CAACE,cAAK,CAACC,GAAG,CAAC,iBAAkBH,OAC1CT,QAAQa,IAAI,CAAC,EACf,CAEA,GAAIT,WAAY,CACd,GAAI,CACFM,QAAQI,GAAG,CAACH,cAAK,CAACI,IAAI,CAAC,+BACvBV,GAAAA,uBAAQ,EAACW,mCAAsB,CAAE,CAAET,IAAKP,QAAQO,GAAG,GAAIC,MAAO,SAAU,EAC1E,CAAE,MAAOC,MAAO,CACdC,QAAQD,KAAK,CAACE,cAAK,CAACC,GAAG,CAAC,sBAAuBH,OAC/CT,QAAQa,IAAI,CAAC,EACf,CACF,CACF,CAEA,GAAId,IAAI,CAAC,EAAE,GAAK,QAAS,CACvBW,QAAQI,GAAG,CAACH,cAAK,CAACI,IAAI,CAAC,4BACvBZ,MAAM,MACNO,QAAQI,GAAG,CAACH,cAAK,CAACM,KAAK,CAAC,kCACxBjB,QAAQa,IAAI,CAAC,EACf,CAEA,GAAId,IAAI,CAAC,EAAE,GAAK,YAAa,CAC3BI,OACF,CAEA,GAAI,CAACe,GAAAA,cAAU,EAACtB,YAAa,CAC3Bc,QAAQD,KAAK,CAAC,AAAC,8BAAwC,OAAXb,aAC5CI,QAAQa,IAAI,CAAC,EACf,CAEA,IAAMM,OAASC,GAAAA,wBAAS,EACtBpB,QAAQqB,QAAQ,CAChB,CAAC,KAAM,8BAA+B,gBAAiBzB,WAAoB,CAA3E,OAAmE,qBAAGG,OACtE,CACES,MAAO,SACT,OAGWW,eAAbnB,QAAQa,IAAI,CAACM,CAAAA,eAAAA,OAAOG,MAAM,UAAbH,wBAAAA,eAAiB"}
@@ -16,7 +16,7 @@ export declare class PuriWrapper<DBSchema extends DatabaseSchemaExtend = Databas
16
16
  raw(sql: string): Knex.Raw;
17
17
  table<TTable extends TableName<DBSchema>>(tableName: TTable): Puri<DBSchema, TTable>;
18
18
  fromSubquery<TSubResult, TAlias extends string>(subquery: Puri<DBSchema, any, any, TSubResult, any>, alias: TAlias extends string ? TAlias : never): Puri<DBSchema, TAlias, TSubResult, TSubResult, {}>;
19
- transaction<T>(callback: (trx: PuriWrapper) => Promise<T>, options?: TransactionalOptions): Promise<T>;
19
+ transaction<T>(callback: (trx: PuriTransactionWrapper) => Promise<T>, options?: TransactionalOptions): Promise<T>;
20
20
  ubRegister<TTable extends TableName<DBSchema>>(tableName: TTable, row: Partial<{
21
21
  [K in keyof DBSchema[TTable]]: DBSchema[TTable][K] | UBRef;
22
22
  }>): UBRef;
@@ -30,5 +30,12 @@ export declare class PuriWrapper<DBSchema extends DatabaseSchemaExtend = Databas
30
30
  debugTransaction(): Promise<void>;
31
31
  private getTransactionInfo;
32
32
  }
33
+ export declare class PuriTransactionWrapper extends PuriWrapper {
34
+ trx: Knex.Transaction;
35
+ upsertBuilder: UpsertBuilder;
36
+ constructor(trx: Knex.Transaction, upsertBuilder: UpsertBuilder);
37
+ rollback(): Promise<void>;
38
+ commit(): Promise<void>;
39
+ }
33
40
  export {};
34
41
  //# sourceMappingURL=puri-wrapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"puri-wrapper.d.ts","sourceRoot":"","sources":["../../src/database/puri-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEhC,KAAK,SAAS,CAAC,QAAQ,SAAS,oBAAoB,IAAI,OAAO,CAC7D,MAAM,QAAQ,EACd,MAAM,CACP,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;IACtD,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,qBAAa,WAAW,CACtB,QAAQ,SAAS,oBAAoB,GAAG,oBAAoB;IAEzC,IAAI,EAAE,IAAI;IAAS,aAAa,EAAE,aAAa;gBAA/C,IAAI,EAAE,IAAI,EAAS,aAAa,EAAE,aAAa;IAElE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG;IAI1B,KAAK,CAAC,MAAM,SAAS,SAAS,CAAC,QAAQ,CAAC,EACtC,SAAS,EAAE,MAAM,GAChB,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;IAKzB,YAAY,CAAC,UAAU,EAAE,MAAM,SAAS,MAAM,EAC5C,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,EACnD,KAAK,EAAE,MAAM,SAAS,MAAM,GAAG,MAAM,GAAG,KAAK,GAC5C,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,CAAC;IAI/C,WAAW,CAAC,CAAC,EACjB,QAAQ,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,EAC1C,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,CAAC,CAAC;IAWb,UAAU,CAAC,MAAM,SAAS,SAAS,CAAC,QAAQ,CAAC,EAC3C,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,OAAO,CAAC;SACV,CAAC,IAAI,MAAM,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;KAC3D,CAAC,GACD,KAAK;IAIR,QAAQ,CACN,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAC9B,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC;IAIpB,YAAY,CACV,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAC9B,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC;IAIpB,gBAAgB,CACd,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAC9B,IAAI,EAAE,QAAQ,GAAG,QAAQ,EACzB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC;IASpB,aAAa,CACX,SAAS,EAAE,SAAS,CAAC,QAAQ,CAAC,EAC9B,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,GAC1D,OAAO,CAAC,IAAI,CAAC;IAKV,gBAAgB;YAKR,kBAAkB;CAwBjC"}
1
+ {"version":3,"file":"puri-wrapper.d.ts","sourceRoot":"","sources":["../../src/database/puri-wrapper.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"PuriWrapper",{enumerable:true,get:function(){return PuriWrapper}});var _puri=require("./puri");var _chalk=/*#__PURE__*/_interop_require_default(require("chalk"));function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _array_with_holes(arr){if(Array.isArray(arr))return arr}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _class_call_check(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _create_class(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function _interop_require_default(obj){return obj&&obj.__esModule?obj:{default:obj}}function _iterable_to_array_limit(arr,i){var _i=arr==null?null:typeof Symbol!=="undefined"&&arr[Symbol.iterator]||arr["@@iterator"];if(_i==null)return;var _arr=[];var _n=true;var _d=false;var _s,_e;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break}}catch(err){_d=true;_e=err}finally{try{if(!_n&&_i["return"]!=null)_i["return"]()}finally{if(_d)throw _e}}return _arr}function _non_iterable_rest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _sliced_to_array(arr,i){return _array_with_holes(arr)||_iterable_to_array_limit(arr,i)||_unsupported_iterable_to_array(arr,i)||_non_iterable_rest()}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o==="string")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}function _ts_generator(thisArg,body){var f,y,t,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},g=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return g.next=verb(0),g["throw"]=verb(1),g["return"]=verb(2),typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(g&&(g=0,op[0]&&(_=0)),_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var PuriWrapper=/*#__PURE__*/function(){"use strict";function PuriWrapper(knex,upsertBuilder){_class_call_check(this,PuriWrapper);_define_property(this,"knex",void 0);_define_property(this,"upsertBuilder",void 0);this.knex=knex;this.upsertBuilder=upsertBuilder}_create_class(PuriWrapper,[{key:"raw",value:function raw(sql){return this.knex.raw(sql)}},{key:"table",value:function table(tableName){return new _puri.Puri(this.knex,tableName)}},{key:"fromSubquery",value:function fromSubquery(subquery,alias){return new _puri.Puri(this.knex,subquery,alias)}},{key:"transaction",value:function transaction(_0){return _async_to_generator(function(callback){var _this,options,isolation,readOnly;var _arguments=arguments;return _ts_generator(this,function(_state){_this=this;options=_arguments.length>1&&_arguments[1]!==void 0?_arguments[1]:{};isolation=options.isolation,readOnly=options.readOnly;return[2,this.knex.transaction(function(trx){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,callback(new PuriWrapper(trx,this.upsertBuilder))]})}).call(_this)},{isolationLevel:isolation,readOnly:readOnly})]})}).apply(this,arguments)}},{key:"ubRegister",value:function ubRegister(tableName,row){return this.upsertBuilder.register(tableName,row)}},{key:"ubUpsert",value:function ubUpsert(tableName,chunkSize){return this.upsertBuilder.upsert(this.knex,tableName,chunkSize)}},{key:"ubInsertOnly",value:function ubInsertOnly(tableName,chunkSize){return this.upsertBuilder.insertOnly(this.knex,tableName,chunkSize)}},{key:"ubUpsertOrInsert",value:function ubUpsertOrInsert(tableName,mode,chunkSize){return this.upsertBuilder.upsertOrInsert(this.knex,tableName,mode,chunkSize)}},{key:"ubUpdateBatch",value:function ubUpdateBatch(tableName,options){return this.upsertBuilder.updateBatch(this.knex,tableName,options)}},{key:"debugTransaction",value:function debugTransaction(){return _async_to_generator(function(){var info;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.getTransactionInfo()];case 1:info=_state.sent();console.log("".concat(_chalk.default.cyan("[Puri Transaction]")," ").concat(_chalk.default.magenta(info)));return[2]}})}).call(this)}},{key:"getTransactionInfo",value:function getTransactionInfo(){return _async_to_generator(function(){var _ref,connectionIdRows,connectionId,_ref1,trxRows,trx;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.knex.raw("SELECT CONNECTION_ID() as connection_id")];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),connectionIdRows=_ref[0];connectionId=connectionIdRows[0].connection_id;return[4,this.knex.raw("\n SELECT STATE, ISOLATION_LEVEL, THREAD_ID, EVENT_ID\n FROM performance_schema.events_transactions_current\n WHERE THREAD_ID = \n (SELECT THREAD_ID\n FROM performance_schema.threads \n WHERE PROCESSLIST_ID = CONNECTION_ID())\n ")];case 2:_ref1=_sliced_to_array.apply(void 0,[_state.sent(),1]),trxRows=_ref1[0];if(trxRows.length>0&&trxRows[0].STATE!=="COMMITTED"){trx=trxRows[0];return[2,"In Transaction, ConnID: ".concat(connectionId,", ThreadID: ").concat(trx.THREAD_ID,", EventID: ").concat(trx.EVENT_ID,", InnoDB TRX: ").concat(trx.STATE,"(").concat(trx.ISOLATION_LEVEL,")")]}else{return[2,"Not in Transaction, ConnID: ".concat(connectionId)]}return[2]}})}).call(this)}}]);return PuriWrapper}();
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get PuriTransactionWrapper(){return PuriTransactionWrapper},get PuriWrapper(){return PuriWrapper}});var _puri=require("./puri");var _chalk=/*#__PURE__*/_interop_require_default(require("chalk"));function _array_like_to_array(arr,len){if(len==null||len>arr.length)len=arr.length;for(var i=0,arr2=new Array(len);i<len;i++)arr2[i]=arr[i];return arr2}function _array_with_holes(arr){if(Array.isArray(arr))return arr}function _assert_this_initialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value}catch(error){reject(error);return}if(info.done){resolve(value)}else{Promise.resolve(value).then(_next,_throw)}}function _async_to_generator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(undefined)})}}function _call_super(_this,derived,args){derived=_get_prototype_of(derived);return _possible_constructor_return(_this,_is_native_reflect_construct()?Reflect.construct(derived,args||[],_get_prototype_of(_this).constructor):derived.apply(_this,args))}function _class_call_check(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function")}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor)}}function _create_class(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor}function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}function _get_prototype_of(o){_get_prototype_of=Object.setPrototypeOf?Object.getPrototypeOf:function getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o)};return _get_prototype_of(o)}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function")}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_set_prototype_of(subClass,superClass)}function _interop_require_default(obj){return obj&&obj.__esModule?obj:{default:obj}}function _iterable_to_array_limit(arr,i){var _i=arr==null?null:typeof Symbol!=="undefined"&&arr[Symbol.iterator]||arr["@@iterator"];if(_i==null)return;var _arr=[];var _n=true;var _d=false;var _s,_e;try{for(_i=_i.call(arr);!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break}}catch(err){_d=true;_e=err}finally{try{if(!_n&&_i["return"]!=null)_i["return"]()}finally{if(_d)throw _e}}return _arr}function _non_iterable_rest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function _possible_constructor_return(self,call){if(call&&(_type_of(call)==="object"||typeof call==="function")){return call}return _assert_this_initialized(self)}function _set_prototype_of(o,p){_set_prototype_of=Object.setPrototypeOf||function setPrototypeOf(o,p){o.__proto__=p;return o};return _set_prototype_of(o,p)}function _sliced_to_array(arr,i){return _array_with_holes(arr)||_iterable_to_array_limit(arr,i)||_unsupported_iterable_to_array(arr,i)||_non_iterable_rest()}function _type_of(obj){"@swc/helpers - typeof";return obj&&typeof Symbol!=="undefined"&&obj.constructor===Symbol?"symbol":typeof obj}function _unsupported_iterable_to_array(o,minLen){if(!o)return;if(typeof o==="string")return _array_like_to_array(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);if(n==="Object"&&o.constructor)n=o.constructor.name;if(n==="Map"||n==="Set")return Array.from(n);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _array_like_to_array(o,minLen)}function _is_native_reflect_construct(){try{var result=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(_){}return(_is_native_reflect_construct=function(){return!!result})()}function _ts_generator(thisArg,body){var f,y,t,_={label:0,sent:function(){if(t[0]&1)throw t[1];return t[1]},trys:[],ops:[]},g=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return g.next=verb(0),g["throw"]=verb(1),g["return"]=verb(2),typeof Symbol==="function"&&(g[Symbol.iterator]=function(){return this}),g;function verb(n){return function(v){return step([n,v])}}function step(op){if(f)throw new TypeError("Generator is already executing.");while(g&&(g=0,op[0]&&(_=0)),_)try{if(f=1,y&&(t=op[0]&2?y["return"]:op[0]?y["throw"]||((t=y["return"])&&t.call(y),0):y.next)&&!(t=t.call(y,op[1])).done)return t;if(y=0,t)op=[op[0]&2,t.value];switch(op[0]){case 0:case 1:t=op;break;case 4:_.label++;return{value:op[1],done:false};case 5:_.label++;y=op[1];op=[0];continue;case 7:op=_.ops.pop();_.trys.pop();continue;default:if(!(t=_.trys,t=t.length>0&&t[t.length-1])&&(op[0]===6||op[0]===2)){_=0;continue}if(op[0]===3&&(!t||op[1]>t[0]&&op[1]<t[3])){_.label=op[1];break}if(op[0]===6&&_.label<t[1]){_.label=t[1];t=op;break}if(t&&_.label<t[2]){_.label=t[2];_.ops.push(op);break}if(t[2])_.ops.pop();_.trys.pop();continue}op=body.call(thisArg,_)}catch(e){op=[6,e];y=0}finally{f=t=0}if(op[0]&5)throw op[1];return{value:op[0]?op[1]:void 0,done:true}}}var PuriWrapper=/*#__PURE__*/function(){"use strict";function PuriWrapper(knex,upsertBuilder){_class_call_check(this,PuriWrapper);_define_property(this,"knex",void 0);_define_property(this,"upsertBuilder",void 0);this.knex=knex;this.upsertBuilder=upsertBuilder}_create_class(PuriWrapper,[{key:"raw",value:function raw(sql){return this.knex.raw(sql)}},{key:"table",value:function table(tableName){return new _puri.Puri(this.knex,tableName)}},{key:"fromSubquery",value:function fromSubquery(subquery,alias){return new _puri.Puri(this.knex,subquery,alias)}},{key:"transaction",value:function transaction(_0){return _async_to_generator(function(callback){var _this,options,isolation,readOnly;var _arguments=arguments;return _ts_generator(this,function(_state){_this=this;options=_arguments.length>1&&_arguments[1]!==void 0?_arguments[1]:{};isolation=options.isolation,readOnly=options.readOnly;return[2,this.knex.transaction(function(trx){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,callback(new PuriTransactionWrapper(trx,this.upsertBuilder))]})}).call(_this)},{isolationLevel:isolation,readOnly:readOnly})]})}).apply(this,arguments)}},{key:"ubRegister",value:function ubRegister(tableName,row){return this.upsertBuilder.register(tableName,row)}},{key:"ubUpsert",value:function ubUpsert(tableName,chunkSize){return this.upsertBuilder.upsert(this.knex,tableName,chunkSize)}},{key:"ubInsertOnly",value:function ubInsertOnly(tableName,chunkSize){return this.upsertBuilder.insertOnly(this.knex,tableName,chunkSize)}},{key:"ubUpsertOrInsert",value:function ubUpsertOrInsert(tableName,mode,chunkSize){return this.upsertBuilder.upsertOrInsert(this.knex,tableName,mode,chunkSize)}},{key:"ubUpdateBatch",value:function ubUpdateBatch(tableName,options){return this.upsertBuilder.updateBatch(this.knex,tableName,options)}},{key:"debugTransaction",value:function debugTransaction(){return _async_to_generator(function(){var info;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.getTransactionInfo()];case 1:info=_state.sent();console.log("".concat(_chalk.default.cyan("[Puri Transaction]")," ").concat(_chalk.default.magenta(info)));return[2]}})}).call(this)}},{key:"getTransactionInfo",value:function getTransactionInfo(){return _async_to_generator(function(){var _ref,connectionIdRows,connectionId,_ref1,trxRows,trx;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.knex.raw("SELECT CONNECTION_ID() as connection_id")];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),connectionIdRows=_ref[0];connectionId=connectionIdRows[0].connection_id;return[4,this.knex.raw("\n SELECT STATE, ISOLATION_LEVEL, THREAD_ID, EVENT_ID\n FROM performance_schema.events_transactions_current\n WHERE THREAD_ID = \n (SELECT THREAD_ID\n FROM performance_schema.threads \n WHERE PROCESSLIST_ID = CONNECTION_ID())\n ")];case 2:_ref1=_sliced_to_array.apply(void 0,[_state.sent(),1]),trxRows=_ref1[0];if(trxRows.length>0&&trxRows[0].STATE!=="COMMITTED"){trx=trxRows[0];return[2,"In Transaction, ConnID: ".concat(connectionId,", ThreadID: ").concat(trx.THREAD_ID,", EventID: ").concat(trx.EVENT_ID,", InnoDB TRX: ").concat(trx.STATE,"(").concat(trx.ISOLATION_LEVEL,")")]}else{return[2,"Not in Transaction, ConnID: ".concat(connectionId)]}return[2]}})}).call(this)}}]);return PuriWrapper}();var PuriTransactionWrapper=/*#__PURE__*/function(PuriWrapper){"use strict";_inherits(PuriTransactionWrapper,PuriWrapper);function PuriTransactionWrapper(trx,upsertBuilder){_class_call_check(this,PuriTransactionWrapper);var _this;_this=_call_super(this,PuriTransactionWrapper,[trx,upsertBuilder]),_define_property(_this,"trx",void 0),_define_property(_this,"upsertBuilder",void 0),_this.trx=trx,_this.upsertBuilder=upsertBuilder;return _this}_create_class(PuriTransactionWrapper,[{key:"rollback",value:function rollback(){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.trx.rollback()];case 1:_state.sent();return[2]}})}).call(this)}},{key:"commit",value:function commit(){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.trx.commit()];case 1:_state.sent();return[2]}})}).call(this)}}]);return PuriTransactionWrapper}(PuriWrapper);
2
2
  //# sourceMappingURL=puri-wrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/database/puri-wrapper.ts"],"sourcesContent":["import { Knex } from \"knex\";\nimport { Puri } from \"./puri\";\nimport { UBRef, UpsertBuilder } from \"./upsert-builder\";\nimport { DatabaseSchemaExtend } from \"../types/types\";\nimport chalk from \"chalk\";\nimport { DBPreset } from \"./db\";\n\ntype TableName<DBSchema extends DatabaseSchemaExtend> = Extract<\n keyof DBSchema,\n string\n>;\n\nexport type TransactionalOptions = {\n isolation?: Exclude<Knex.IsolationLevels, \"snapshot\">; // snapshot: mssql only\n dbPreset?: DBPreset;\n readOnly?: boolean;\n};\n\nexport class PuriWrapper<\n DBSchema extends DatabaseSchemaExtend = DatabaseSchemaExtend\n> {\n constructor(public knex: Knex, public upsertBuilder: UpsertBuilder) {}\n\n raw(sql: string): Knex.Raw {\n return this.knex.raw(sql);\n }\n // 기존: 테이블로 시작\n table<TTable extends TableName<DBSchema>>(\n tableName: TTable\n ): Puri<DBSchema, TTable> {\n return new Puri(this.knex, tableName as any);\n }\n\n // 새로 추가: 서브쿼리로 시작\n fromSubquery<TSubResult, TAlias extends string>(\n subquery: Puri<DBSchema, any, any, TSubResult, any>,\n alias: TAlias extends string ? TAlias : never\n ): Puri<DBSchema, TAlias, TSubResult, TSubResult, {}> {\n return new Puri(this.knex, subquery, alias);\n }\n\n async transaction<T>(\n callback: (trx: PuriWrapper) => Promise<T>,\n options: TransactionalOptions = {}\n ): Promise<T> {\n const { isolation, readOnly } = options;\n\n return this.knex.transaction(\n async (trx) => {\n return callback(new PuriWrapper(trx, this.upsertBuilder));\n },\n { isolationLevel: isolation, readOnly }\n );\n }\n\n ubRegister<TTable extends TableName<DBSchema>>(\n tableName: TTable,\n row: Partial<{\n [K in keyof DBSchema[TTable]]: DBSchema[TTable][K] | UBRef;\n }>\n ): UBRef {\n return this.upsertBuilder.register(tableName, row);\n }\n\n ubUpsert(\n tableName: TableName<DBSchema>,\n chunkSize?: number\n ): Promise<number[]> {\n return this.upsertBuilder.upsert(this.knex, tableName, chunkSize);\n }\n\n ubInsertOnly(\n tableName: TableName<DBSchema>,\n chunkSize?: number\n ): Promise<number[]> {\n return this.upsertBuilder.insertOnly(this.knex, tableName, chunkSize);\n }\n\n ubUpsertOrInsert(\n tableName: TableName<DBSchema>,\n mode: \"upsert\" | \"insert\",\n chunkSize?: number\n ): Promise<number[]> {\n return this.upsertBuilder.upsertOrInsert(\n this.knex,\n tableName,\n mode,\n chunkSize\n );\n }\n\n ubUpdateBatch(\n tableName: TableName<DBSchema>,\n options?: { chunkSize?: number; where?: string | string[] }\n ): Promise<void> {\n return this.upsertBuilder.updateBatch(this.knex, tableName, options);\n }\n\n // 트랜잭션 연결 테스트용\n async debugTransaction() {\n const info = await this.getTransactionInfo();\n console.log(`${chalk.cyan(\"[Puri Transaction]\")} ${chalk.magenta(info)}`);\n }\n\n private async getTransactionInfo(): Promise<string> {\n // 연결 ID 조회\n const [connectionIdRows] = await this.knex.raw(\n `SELECT CONNECTION_ID() as connection_id`\n );\n const connectionId = connectionIdRows[0].connection_id;\n\n // 트랜잭션 정보 조회\n const [trxRows] = await this.knex.raw(`\n SELECT STATE, ISOLATION_LEVEL, THREAD_ID, EVENT_ID\n FROM performance_schema.events_transactions_current\n WHERE THREAD_ID = \n (SELECT THREAD_ID\n FROM performance_schema.threads \n WHERE PROCESSLIST_ID = CONNECTION_ID())\n `);\n\n if (trxRows.length > 0 && trxRows[0].STATE !== \"COMMITTED\") {\n const trx = trxRows[0];\n return `In Transaction, ConnID: ${connectionId}, ThreadID: ${trx.THREAD_ID}, EventID: ${trx.EVENT_ID}, InnoDB TRX: ${trx.STATE}(${trx.ISOLATION_LEVEL})`;\n } else {\n return `Not in Transaction, ConnID: ${connectionId}`;\n }\n }\n}\n"],"names":["PuriWrapper","knex","upsertBuilder","raw","sql","table","tableName","Puri","fromSubquery","subquery","alias","transaction","callback","options","isolation","readOnly","trx","isolationLevel","ubRegister","row","register","ubUpsert","chunkSize","upsert","ubInsertOnly","insertOnly","ubUpsertOrInsert","mode","upsertOrInsert","ubUpdateBatch","updateBatch","debugTransaction","info","getTransactionInfo","console","log","chalk","cyan","magenta","connectionIdRows","connectionId","trxRows","connection_id","length","STATE","THREAD_ID","EVENT_ID","ISOLATION_LEVEL"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/database/puri-wrapper.ts"],"sourcesContent":["import { Knex } from \"knex\";\nimport { Puri } from \"./puri\";\nimport { UBRef, UpsertBuilder } from \"./upsert-builder\";\nimport { DatabaseSchemaExtend } from \"../types/types\";\nimport chalk from \"chalk\";\nimport { DBPreset } from \"./db\";\n\ntype TableName<DBSchema extends DatabaseSchemaExtend> = Extract<\n keyof DBSchema,\n string\n>;\n\nexport type TransactionalOptions = {\n isolation?: Exclude<Knex.IsolationLevels, \"snapshot\">; // snapshot: mssql only\n dbPreset?: DBPreset;\n readOnly?: boolean;\n};\n\nexport class PuriWrapper<\n DBSchema extends DatabaseSchemaExtend = DatabaseSchemaExtend,\n> {\n constructor(\n public knex: Knex,\n public upsertBuilder: UpsertBuilder\n ) {}\n\n raw(sql: string): Knex.Raw {\n return this.knex.raw(sql);\n }\n // 기존: 테이블로 시작\n table<TTable extends TableName<DBSchema>>(\n tableName: TTable\n ): Puri<DBSchema, TTable> {\n return new Puri(this.knex, tableName as any);\n }\n\n // 새로 추가: 서브쿼리로 시작\n fromSubquery<TSubResult, TAlias extends string>(\n subquery: Puri<DBSchema, any, any, TSubResult, any>,\n alias: TAlias extends string ? TAlias : never\n ): Puri<DBSchema, TAlias, TSubResult, TSubResult, {}> {\n return new Puri(this.knex, subquery, alias);\n }\n\n async transaction<T>(\n callback: (trx: PuriTransactionWrapper) => Promise<T>,\n options: TransactionalOptions = {}\n ): Promise<T> {\n const { isolation, readOnly } = options;\n\n return this.knex.transaction(\n async (trx) => {\n return callback(new PuriTransactionWrapper(trx, this.upsertBuilder));\n },\n { isolationLevel: isolation, readOnly }\n );\n }\n\n ubRegister<TTable extends TableName<DBSchema>>(\n tableName: TTable,\n row: Partial<{\n [K in keyof DBSchema[TTable]]: DBSchema[TTable][K] | UBRef;\n }>\n ): UBRef {\n return this.upsertBuilder.register(tableName, row);\n }\n\n ubUpsert(\n tableName: TableName<DBSchema>,\n chunkSize?: number\n ): Promise<number[]> {\n return this.upsertBuilder.upsert(this.knex, tableName, chunkSize);\n }\n\n ubInsertOnly(\n tableName: TableName<DBSchema>,\n chunkSize?: number\n ): Promise<number[]> {\n return this.upsertBuilder.insertOnly(this.knex, tableName, chunkSize);\n }\n\n ubUpsertOrInsert(\n tableName: TableName<DBSchema>,\n mode: \"upsert\" | \"insert\",\n chunkSize?: number\n ): Promise<number[]> {\n return this.upsertBuilder.upsertOrInsert(\n this.knex,\n tableName,\n mode,\n chunkSize\n );\n }\n\n ubUpdateBatch(\n tableName: TableName<DBSchema>,\n options?: { chunkSize?: number; where?: string | string[] }\n ): Promise<void> {\n return this.upsertBuilder.updateBatch(this.knex, tableName, options);\n }\n\n // 트랜잭션 연결 테스트용\n async debugTransaction() {\n const info = await this.getTransactionInfo();\n console.log(`${chalk.cyan(\"[Puri Transaction]\")} ${chalk.magenta(info)}`);\n }\n\n private async getTransactionInfo(): Promise<string> {\n // 연결 ID 조회\n const [connectionIdRows] = await this.knex.raw(\n `SELECT CONNECTION_ID() as connection_id`\n );\n const connectionId = connectionIdRows[0].connection_id;\n\n // 트랜잭션 정보 조회\n const [trxRows] = await this.knex.raw(`\n SELECT STATE, ISOLATION_LEVEL, THREAD_ID, EVENT_ID\n FROM performance_schema.events_transactions_current\n WHERE THREAD_ID = \n (SELECT THREAD_ID\n FROM performance_schema.threads \n WHERE PROCESSLIST_ID = CONNECTION_ID())\n `);\n\n if (trxRows.length > 0 && trxRows[0].STATE !== \"COMMITTED\") {\n const trx = trxRows[0];\n return `In Transaction, ConnID: ${connectionId}, ThreadID: ${trx.THREAD_ID}, EventID: ${trx.EVENT_ID}, InnoDB TRX: ${trx.STATE}(${trx.ISOLATION_LEVEL})`;\n } else {\n return `Not in Transaction, ConnID: ${connectionId}`;\n }\n }\n}\n\nexport class PuriTransactionWrapper extends PuriWrapper {\n constructor(\n public trx: Knex.Transaction,\n public upsertBuilder: UpsertBuilder\n ) {\n super(trx, upsertBuilder);\n }\n\n async rollback(): Promise<void> {\n await this.trx.rollback();\n }\n\n async commit(): Promise<void> {\n await this.trx.commit();\n }\n}\n"],"names":["PuriTransactionWrapper","PuriWrapper","knex","upsertBuilder","raw","sql","table","tableName","Puri","fromSubquery","subquery","alias","transaction","callback","options","isolation","readOnly","trx","isolationLevel","ubRegister","row","register","ubUpsert","chunkSize","upsert","ubInsertOnly","insertOnly","ubUpsertOrInsert","mode","upsertOrInsert","ubUpdateBatch","updateBatch","debugTransaction","info","getTransactionInfo","console","log","chalk","cyan","magenta","connectionIdRows","connectionId","trxRows","connection_id","length","STATE","THREAD_ID","EVENT_ID","ISOLATION_LEVEL","rollback","commit"],"mappings":"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"}
@@ -54,6 +54,8 @@ export declare class Puri<TSchema, TTable extends keyof TSchema | string, TOrigi
54
54
  debug(): Puri<TSchema, TTable, TOriginal, TResult, TJoined>;
55
55
  formatSQL(unformatted: string): string;
56
56
  raw(): Knex.QueryBuilder;
57
+ increment<TColumn extends AvailableColumns<TSchema, TTable, TOriginal, TJoined>>(column: TColumn, value: number): Puri<TSchema, TTable, TOriginal, TResult, TJoined>;
58
+ decrement<TColumn extends AvailableColumns<TSchema, TTable, TOriginal, TJoined>>(column: TColumn, value: number): Puri<TSchema, TTable, TOriginal, TResult, TJoined>;
57
59
  }
58
60
  declare class WhereGroup<TSchema, TTable extends keyof TSchema | string, TOriginal = any, TJoined = EmptyRecord> {
59
61
  private builder;
@@ -1 +1 @@
1
- {"version":3,"file":"puri.d.ts","sourceRoot":"","sources":["../../src/database/puri.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,KAAK,EACV,gBAAgB,EAChB,kBAAkB,EAClB,WAAW,EACX,MAAM,EACN,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,sBAAsB,EACtB,YAAY,EACZ,WAAW,EACX,cAAc,EACf,MAAM,cAAc,CAAC;AAItB,qBAAa,IAAI,CACf,OAAO,EACP,MAAM,SAAS,MAAM,OAAO,GAAG,MAAM,EACrC,SAAS,GAAG,MAAM,SAAS,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,EACpE,OAAO,GAAG,MAAM,SAAS,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,EAClE,OAAO,GAAG,WAAW;IAenB,OAAO,CAAC,IAAI;IAbd,OAAO,CAAC,SAAS,CAAoB;gBAInC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,SAAS,MAAM,OAAO,GAAG,MAAM,GAAG,OAAO;gBAG1D,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,CAAC,EACjD,KAAK,EAAE,MAAM,SAAS,MAAM,GAAG,MAAM,GAAG,KAAK;IAiB/C,MAAM,CAAC,KAAK,CAAC,MAAM,GAAE,MAAY,GAAG,WAAW,CAAC,QAAQ,CAAC;IAQzD,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC;IAIjD,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC;IAIjD,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC;IAIjD,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC;IAIjD,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC,QAAQ,CAAC;IAQvD,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC;IAQnD,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC;IASnD,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC;IAIpD,MAAM,CAAC,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC;IAIpD,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC;IAItD,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;IAKhD,MAAM,CAAC,OAAO,SAAS,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EACtE,SAAS,EAAE,OAAO,GACjB,IAAI,CACL,OAAO,EACP,MAAM,EACN,SAAS,EACT,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,CAAC,EAC/D,OAAO,CACR;IA8BD,SAAS,IAAI,IAAI,CACf,OAAO,EACP,MAAM,EACN,SAAS,EACT,MAAM,SAAS,MAAM,OAAO,GACxB,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,GACzB,OAAO,GAAG,OAAO,EACrB,OAAO,CACR;IAMD,KAAK,CACH,UAAU,EAAE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,GAC9D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IACrD,KAAK,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EACzE,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,iBAAiB,CACtB,OAAO,EACP,MAAM,EACN,OAAO,GAAG,MAAM,EAChB,SAAS,EACT,OAAO,CACR,GACA,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IACrD,KAAK,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EACzE,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,kBAAkB,GAAG,MAAM,EACrC,KAAK,EAAE,iBAAiB,CACtB,OAAO,EACP,MAAM,EACN,OAAO,GAAG,MAAM,EAChB,SAAS,EACT,OAAO,CACR,GACA,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IAgCrD,OAAO,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAC3E,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,iBAAiB,CACvB,OAAO,EACP,MAAM,EACN,OAAO,GAAG,MAAM,EAChB,SAAS,EACT,OAAO,CACR,EAAE,GACF,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IASrD,UAAU,CACR,OAAO,SAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAErE,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,iBAAiB,CACvB,OAAO,EACP,MAAM,EACN,OAAO,GAAG,MAAM,EAChB,SAAS,EACT,OAAO,CACR,EAAE,GACF,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IASrD,UAAU,CACR,OAAO,SAAS,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EACpE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IAMrF,UAAU,CACR,QAAQ,EAAE,CACR,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,KACnD,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,GACnD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IAQrD,YAAY,CACV,QAAQ,EAAE,CACR,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,KACnD,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,GACnD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IASrD,IAAI,CACF,UAAU,SAAS,MAAM,OAAO,EAChC,QAAQ,SAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAChH,QAAQ,SAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAEhH,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,QAAQ,GACd,IAAI,CACL,OAAO,EACP,MAAM,EACN,SAAS,EACT,OAAO,EACP,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAC9D;IACD,IAAI,CAAC,UAAU,SAAS,MAAM,OAAO,EACnC,KAAK,EAAE,UAAU,EACjB,YAAY,EAAE,CACZ,UAAU,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,KAC7D,IAAI,GACR,IAAI,CACL,OAAO,EACP,MAAM,EACN,SAAS,EACT,OAAO,EACP,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAC9D;IACD,IAAI,CAAC,UAAU,EAAE,MAAM,SAAS,MAAM,EACpC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,EAClD,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAClF,IAAI,CACF,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IA2BrD,QAAQ,CACN,UAAU,SAAS,MAAM,OAAO,EAChC,QAAQ,SAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAChH,QAAQ,SAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAEhH,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,QAAQ,GACd,IAAI,CACL,OAAO,EACP,MAAM,EACN,SAAS,EACT,OAAO,EACP,OAAO,GAAG,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAC3D;IACD,QAAQ,CAAC,UAAU,EAAE,MAAM,SAAS,MAAM,EACxC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,CAAC,EAClD,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,IAAI,CACL,OAAO,EACP,MAAM,EACN,SAAS,EACT,OAAO,EACP,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAC9C;IACD,QAAQ,CACN,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IAiBrD,OAAO,CAAC,OAAO,SAAS,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAC1F,MAAM,EAAE,OAAO,EACf,SAAS,EAAE,KAAK,GAAG,MAAM,GACxB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IAUrD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IAKxE,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IAMzE,OAAO,CAAC,QAAQ,SAAS,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EAC3F,GAAG,OAAO,EAAE,QAAQ,EAAE,GACrB,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IAMrD,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IAC7E,MAAM,CAAC,OAAO,SAAS,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,EACzF,SAAS,EAAE,OAAO,EAClB,QAAQ,EAAE,kBAAkB,EAC5B,KAAK,EAAE,GAAG,GACT,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IAMrD,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,KAAK,EAC7B,WAAW,CAAC,EACR,CAAC,CACC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,KACrB,MAAM,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,GACtD,IAAI,EACR,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,GACtE,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;IAIvC,KAAK,CAAC,QAAQ,GAAG,KAAK,EACpB,UAAU,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,GAAG,KAAK,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,GACtE,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC;IAItC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAK5D,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IAI7C,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAQ/B,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,SAAS,CAAC;IAKvD,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAWjD,MAAM,CACV,IAAI,EAAE,MAAM,SAAS,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,OAAO,GACzE,OAAO,CAAC,MAAM,EAAE,CAAC;IAId,MAAM,CACV,IAAI,EAAE,OAAO,CAAC,MAAM,SAAS,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,GACtE,OAAO,CAAC,MAAM,CAAC;IAIZ,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAI/B,OAAO,IAAI,MAAM;IAIjB,KAAK,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;IAO3D,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM;IA+GtC,GAAG,IAAI,IAAI,CAAC,YAAY;CAGzB;AAGD,cAAM,UAAU,CACd,OAAO,EACP,MAAM,SAAS,MAAM,OAAO,GAAG,MAAM,EACrC,SAAS,GAAG,GAAG,EACf,OAAO,GAAG,WAAW;IAET,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,IAAI,CAAC,YAAY;IAE9C,KAAK,CACH,UAAU,EAAE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,GAC9D,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;IAClD,KAAK,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EACzE,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,iBAAiB,CACtB,OAAO,EACP,MAAM,EACN,OAAO,GAAG,MAAM,EAChB,SAAS,EACT,OAAO,CACR,GACA,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;IAClD,KAAK,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EACzE,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,kBAAkB,GAAG,MAAM,EACrC,KAAK,EAAE,iBAAiB,CACtB,OAAO,EACP,MAAM,EACN,OAAO,GAAG,MAAM,EAChB,SAAS,EACT,OAAO,CACR,GACA,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;IAClD,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;IAMnE,OAAO,CACL,UAAU,EAAE,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,GAC9D,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;IAClD,OAAO,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAC3E,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,iBAAiB,CACtB,OAAO,EACP,MAAM,EACN,OAAO,GAAG,MAAM,EAChB,SAAS,EACT,OAAO,CACR,GACA,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;IAClD,OAAO,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAC3E,MAAM,EAAE,OAAO,EACf,QAAQ,EAAE,kBAAkB,GAAG,MAAM,EACrC,KAAK,EAAE,iBAAiB,CACtB,OAAO,EACP,MAAM,EACN,OAAO,GAAG,MAAM,EAChB,SAAS,EACT,OAAO,CACR,GACA,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;IAClD,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;IAMrE,OAAO,CAAC,OAAO,SAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAC3E,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,iBAAiB,CACvB,OAAO,EACP,MAAM,EACN,OAAO,GAAG,MAAM,EAChB,SAAS,EACT,OAAO,CACR,EAAE,GACF,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;IASlD,SAAS,CACP,OAAO,SAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAErE,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,iBAAiB,CACvB,OAAO,EACP,MAAM,EACN,OAAO,GAAG,MAAM,EAChB,SAAS,EACT,OAAO,CACR,EAAE,GACF,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;IAUlD,UAAU,CACR,QAAQ,EAAE,CACR,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,KACnD,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,GACnD,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;IAUlD,YAAY,CACV,QAAQ,EAAE,CACR,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,KACnD,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,GACnD,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;CASnD;AAED,qBAAa,eAAe,CAC1B,OAAO,EACP,MAAM,SAAS,MAAM,OAAO,GAAG,MAAM,EACrC,SAAS,GAAG,GAAG,EACf,OAAO,GAAG,WAAW;IAET,OAAO,CAAC,QAAQ;gBAAR,QAAQ,EAAE,IAAI,CAAC,UAAU;IAE7C,EAAE,CACA,QAAQ,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,IAAI,GACnF,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;IACvD,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;IAMpF,IAAI,CACF,QAAQ,EAAE,CAAC,UAAU,EAAE,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,IAAI,GACnF,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;IACvD,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC;CAKvF"}
1
+ {"version":3,"file":"puri.d.ts","sourceRoot":"","sources":["../../src/database/puri.ts"],"names":[],"mappings":"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"}