sonamu 0.8.26 → 0.8.28

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.
@@ -37,14 +37,10 @@ export function bootstrap(vi, options) {
37
37
  }
38
38
  function getMockContext() {
39
39
  return {
40
- ip: "127.0.0.1",
41
- session: {},
40
+ session: null,
42
41
  user: null,
43
- passport: {
44
- login: async ()=>{},
45
- logout: ()=>{}
46
- },
47
- naiteStore: Naite.createStore()
42
+ naiteStore: Naite.createStore(),
43
+ locale: ""
48
44
  };
49
45
  }
50
46
  export async function runWithContext(context, fn) {
@@ -122,4 +118,4 @@ export const testAs = Object.assign(async (user, title, fn, options)=>{
122
118
  todo: (title)=>vitestTest.todo(title)
123
119
  });
124
120
 
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2Jvb3RzdHJhcC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhZnRlckFsbCxcbiAgYWZ0ZXJFYWNoLFxuICBiZWZvcmVBbGwsXG4gIGJlZm9yZUVhY2gsXG4gIHR5cGUgVGVzdEZ1bmN0aW9uLFxuICB0eXBlIFRlc3RPcHRpb25zLFxuICB0eXBlIFZpdGVzdFV0aWxzLFxuICB0ZXN0IGFzIHZpdGVzdFRlc3QsXG59IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB0eXBlIHsgQ29udGV4dCB9IGZyb20gXCIuLi9hcGkvY29udGV4dFwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IERCIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBOYWl0ZSwgdHlwZSBTZXJpYWxpemVkVHJhY2UgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IE5haXRlUmVwb3J0ZXIgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGUtcmVwb3J0ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBCb290c3RyYXBPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNvbmFtdSDstIjquLDtmZQg66qo65Oc66W8IOyngOygle2VqeuLiOuLpC5cbiAgICogLSB0cnVlICjquLDrs7jqsJIpOiDthYzsiqTtjIUg66qo65Oc66GcIOy0iOq4sO2ZlCAo67mg66aELCBTeW5jZXIvVGFzayDsg53rnrUpXG4gICAqIC0gZmFsc2U6IOyghOyytCDstIjquLDtmZQgKFN5bmNlciwgVGFzaywgRW50aXR5TWFuYWdlciDrk7Eg66qo65GQIOuhnOuTnClcbiAgICpcbiAgICogbWlncmF0b3IsIHN5bmNlciwgdGVtcGxhdGUg65Ox7J2YIO2FjOyKpO2KuOyXkOyEnOuKlCBmYWxzZeulvCDsgqzsmqntlanri4jri6QuXG4gICAqL1xuICBmb3JUZXN0aW5nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvb3RzdHJhcCh2aTogVml0ZXN0VXRpbHMsIG9wdGlvbnM/OiBCb290c3RyYXBPcHRpb25zKSB7XG4gIGNvbnN0IGZvclRlc3RpbmcgPSBvcHRpb25zPy5mb3JUZXN0aW5nID8/IHRydWU7XG5cbiAgYmVmb3JlQWxsKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWZvclRlc3RpbmcpIHtcbiAgICAgIC8vIGZvclRlc3Rpbmc6IGZhbHNl7J24IOqyveyasCDsnqzstIjquLDtmZTqsIAg7ZWE7JqU7ZWY66+A66GcIO2UjOuemOq3uCDtlbTsoJxcbiAgICAgIFNvbmFtdS5pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgfVxuICAgIGF3YWl0IFNvbmFtdS5pbml0KHRydWUsIGZhbHNlLCB1bmRlZmluZWQsIGZvclRlc3RpbmcpO1xuICB9KTtcbiAgYmVmb3JlRWFjaChhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgREIuY3JlYXRlVGVzdFRyYW5zYWN0aW9uKCk7XG4gIH0pO1xuICBhZnRlckVhY2goYXN5bmMgKHsgdGFzayB9KSA9PiB7XG4gICAgdmkudXNlUmVhbFRpbWVycygpO1xuICAgIGF3YWl0IERCLmNsZWFyVGVzdFRyYW5zYWN0aW9uKCk7XG5cbiAgICBhd2FpdCBOYWl0ZVJlcG9ydGVyLnJlcG9ydFRlc3RSZXN1bHQoe1xuICAgICAgc3VpdGVOYW1lOiB0YXNrLnN1aXRlPy5uYW1lID8/IFwiKG5vIHN1aXRlKVwiLFxuICAgICAgc3VpdGVGaWxlUGF0aDogdGFzay5maWxlPy5maWxlcGF0aCxcbiAgICAgIHRlc3ROYW1lOiB0YXNrLm5hbWUsXG4gICAgICB0ZXN0RmlsZVBhdGg6IHRhc2suZmlsZT8uZmlsZXBhdGggPz8gXCJcIixcbiAgICAgIHRlc3RMaW5lOiB0YXNrLmxvY2F0aW9uPy5saW5lID8/IDAsXG4gICAgICBzdGF0dXM6IHRhc2sucmVzdWx0Py5zdGF0ZSA/PyBcInBhc3NcIixcbiAgICAgIGR1cmF0aW9uOiB0YXNrLnJlc3VsdD8uZHVyYXRpb24gPz8gMCxcbiAgICAgIGVycm9yOiB0YXNrLnJlc3VsdD8uZXJyb3JzPy5bMF1cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBtZXNzYWdlOiB0YXNrLnJlc3VsdC5lcnJvcnNbMF0ubWVzc2FnZSxcbiAgICAgICAgICAgIHN0YWNrOiB0YXNrLnJlc3VsdC5lcnJvcnNbMF0uc3RhY2ssXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHRyYWNlczogdGFzay5tZXRhPy50cmFjZXMgPz8gW10sXG4gICAgfSk7XG4gIH0pO1xuICBhZnRlckFsbCgoKSA9PiB7fSk7XG59XG5cbmZ1bmN0aW9uIGdldE1vY2tDb250ZXh0KCk6IENvbnRleHQge1xuICByZXR1cm4ge1xuICAgIGlwOiBcIjEyNy4wLjAuMVwiLFxuICAgIHNlc3Npb246IHt9LFxuICAgIHVzZXI6IG51bGwsXG4gICAgcGFzc3BvcnQ6IHtcbiAgICAgIGxvZ2luOiBhc3luYyAoKSA9PiB7fSxcbiAgICAgIGxvZ291dDogKCkgPT4ge30sXG4gICAgfSxcbiAgICBuYWl0ZVN0b3JlOiBOYWl0ZS5jcmVhdGVTdG9yZSgpLFxuICB9IGFzIHVua25vd24gYXMgQ29udGV4dDtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bldpdGhDb250ZXh0KGNvbnRleHQ6IENvbnRleHQgfCBudWxsLCBmbjogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICAvLyBTb25hbXUuYXN5bmNMb2NhbFN0b3JhZ2UucnVu7Jy866GcIGNvbnRleHQg7ISk7KCVXG4gIGF3YWl0IFNvbmFtdS5hc3luY0xvY2FsU3RvcmFnZS5ydW4oeyBjb250ZXh0OiBjb250ZXh0ID8/IGdldE1vY2tDb250ZXh0KCkgfSwgZm4pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuV2l0aE1vY2tDb250ZXh0KGZuOiAoKSA9PiBQcm9taXNlPHZvaWQ+KSB7XG4gIGF3YWl0IHJ1bldpdGhDb250ZXh0KGdldE1vY2tDb250ZXh0KCksIGZuKTtcbn1cblxuZGVjbGFyZSBtb2R1bGUgXCJ2aXRlc3RcIiB7XG4gIGludGVyZmFjZSBUYXNrTWV0YSB7XG4gICAgdHJhY2VzOiBTZXJpYWxpemVkVHJhY2VbXTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgdGVzdCA9IE9iamVjdC5hc3NpZ24oXG4gIGFzeW5jICh0aXRsZTogc3RyaW5nLCBmbjogVGVzdEZ1bmN0aW9uPG9iamVjdD4sIG9wdGlvbnM/OiBUZXN0T3B0aW9ucykgPT4ge1xuICAgIHJldHVybiB2aXRlc3RUZXN0KHRpdGxlLCBvcHRpb25zLCBhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgYXdhaXQgcnVuV2l0aE1vY2tDb250ZXh0KGFzeW5jICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBmbihjb250ZXh0KTtcbiAgICAgICAgICBjb250ZXh0LnRhc2subWV0YS50cmFjZXMgPSBOYWl0ZS5nZXRBbGxUcmFjZXMoKTtcbiAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgIGNvbnRleHQudGFzay5tZXRhLnRyYWNlcyA9IE5haXRlLmdldEFsbFRyYWNlcygpO1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LFxuICB7XG4gICAgc2tpcDogYXN5bmMgKHRpdGxlOiBzdHJpbmcsIGZuOiBUZXN0RnVuY3Rpb248b2JqZWN0Piwgb3B0aW9ucz86IFRlc3RPcHRpb25zKSA9PlxuICAgICAgdml0ZXN0VGVzdC5za2lwKHRpdGxlLCBvcHRpb25zLCBmbiksXG4gICAgb25seTogYXN5bmMgKHRpdGxlOiBzdHJpbmcsIGZuOiBUZXN0RnVuY3Rpb248b2JqZWN0Piwgb3B0aW9ucz86IFRlc3RPcHRpb25zKSA9PiB7XG4gICAgICByZXR1cm4gdml0ZXN0VGVzdC5vbmx5KHRpdGxlLCBvcHRpb25zLCBhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgICBhd2FpdCBydW5XaXRoTW9ja0NvbnRleHQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBmbihjb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnRleHQudGFzay5tZXRhLnRyYWNlcyA9IE5haXRlLmdldEFsbFRyYWNlcygpO1xuICAgICAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgICAgIGNvbnRleHQudGFzay5tZXRhLnRyYWNlcyA9IE5haXRlLmdldEFsbFRyYWNlcygpO1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICB0b2RvOiAodGl0bGU6IHN0cmluZykgPT4gdml0ZXN0VGVzdC50b2RvKHRpdGxlKSxcbiAgICBlYWNoOiB2aXRlc3RUZXN0LmVhY2guYmluZCh2aXRlc3RUZXN0KSBhcyB0eXBlb2Ygdml0ZXN0VGVzdC5lYWNoLFxuICB9LFxuKTtcblxuZXhwb3J0IGNvbnN0IHRlc3RBcyA9IE9iamVjdC5hc3NpZ24oXG4gIGFzeW5jIDxVc2VyIGV4dGVuZHMgQ29udGV4dFtcInVzZXJcIl0+KFxuICAgIHVzZXI6IFVzZXIsXG4gICAgdGl0bGU6IHN0cmluZyxcbiAgICBmbjogVGVzdEZ1bmN0aW9uPG9iamVjdD4sXG4gICAgb3B0aW9ucz86IFRlc3RPcHRpb25zLFxuICApID0+IHtcbiAgICByZXR1cm4gdml0ZXN0VGVzdCh0aXRsZSwgb3B0aW9ucywgYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgIGF3YWl0IHJ1bldpdGhDb250ZXh0KFxuICAgICAgICB7XG4gICAgICAgICAgLi4uZ2V0TW9ja0NvbnRleHQoKSxcbiAgICAgICAgICB1c2VyLFxuICAgICAgICB9LFxuICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IGZuKGNvbnRleHQpO1xuICAgICAgICAgICAgY29udGV4dC50YXNrLm1ldGEudHJhY2VzID0gTmFpdGUuZ2V0QWxsVHJhY2VzKCk7XG4gICAgICAgICAgfSBjYXRjaCAoZTogdW5rbm93bikge1xuICAgICAgICAgICAgY29udGV4dC50YXNrLm1ldGEudHJhY2VzID0gTmFpdGUuZ2V0QWxsVHJhY2VzKCk7XG4gICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH0sXG4gIHtcbiAgICBza2lwOiBhc3luYyA8VXNlciBleHRlbmRzIENvbnRleHRbXCJ1c2VyXCJdPihcbiAgICAgIF91c2VyOiBVc2VyLFxuICAgICAgdGl0bGU6IHN0cmluZyxcbiAgICAgIGZuOiBUZXN0RnVuY3Rpb248b2JqZWN0PixcbiAgICAgIG9wdGlvbnM/OiBUZXN0T3B0aW9ucyxcbiAgICApID0+IHZpdGVzdFRlc3Quc2tpcCh0aXRsZSwgb3B0aW9ucywgZm4pLFxuICAgIG9ubHk6IGFzeW5jIDxVc2VyIGV4dGVuZHMgQ29udGV4dFtcInVzZXJcIl0+KFxuICAgICAgdXNlcjogVXNlcixcbiAgICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgICBmbjogVGVzdEZ1bmN0aW9uPG9iamVjdD4sXG4gICAgICBvcHRpb25zPzogVGVzdE9wdGlvbnMsXG4gICAgKSA9PiB7XG4gICAgICByZXR1cm4gdml0ZXN0VGVzdC5vbmx5KHRpdGxlLCBvcHRpb25zLCBhc3luYyAoY29udGV4dCkgPT4ge1xuICAgICAgICBhd2FpdCBydW5XaXRoQ29udGV4dChcbiAgICAgICAgICB7XG4gICAgICAgICAgICAuLi5nZXRNb2NrQ29udGV4dCgpLFxuICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICB9LFxuICAgICAgICAgIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGF3YWl0IGZuKGNvbnRleHQpO1xuICAgICAgICAgICAgICBjb250ZXh0LnRhc2subWV0YS50cmFjZXMgPSBOYWl0ZS5nZXRBbGxUcmFjZXMoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgICAgICAgY29udGV4dC50YXNrLm1ldGEudHJhY2VzID0gTmFpdGUuZ2V0QWxsVHJhY2VzKCk7XG4gICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgdG9kbzogKHRpdGxlOiBzdHJpbmcpID0+IHZpdGVzdFRlc3QudG9kbyh0aXRsZSksXG4gIH0sXG4pO1xuIl0sIm5hbWVzIjpbImFmdGVyQWxsIiwiYWZ0ZXJFYWNoIiwiYmVmb3JlQWxsIiwiYmVmb3JlRWFjaCIsInRlc3QiLCJ2aXRlc3RUZXN0IiwiU29uYW11IiwiREIiLCJOYWl0ZSIsIk5haXRlUmVwb3J0ZXIiLCJib290c3RyYXAiLCJ2aSIsIm9wdGlvbnMiLCJmb3JUZXN0aW5nIiwiaXNJbml0aWFsaXplZCIsImluaXQiLCJ1bmRlZmluZWQiLCJjcmVhdGVUZXN0VHJhbnNhY3Rpb24iLCJ0YXNrIiwidXNlUmVhbFRpbWVycyIsImNsZWFyVGVzdFRyYW5zYWN0aW9uIiwicmVwb3J0VGVzdFJlc3VsdCIsInN1aXRlTmFtZSIsInN1aXRlIiwibmFtZSIsInN1aXRlRmlsZVBhdGgiLCJmaWxlIiwiZmlsZXBhdGgiLCJ0ZXN0TmFtZSIsInRlc3RGaWxlUGF0aCIsInRlc3RMaW5lIiwibG9jYXRpb24iLCJsaW5lIiwic3RhdHVzIiwicmVzdWx0Iiwic3RhdGUiLCJkdXJhdGlvbiIsImVycm9yIiwiZXJyb3JzIiwibWVzc2FnZSIsInN0YWNrIiwidHJhY2VzIiwibWV0YSIsImdldE1vY2tDb250ZXh0IiwiaXAiLCJzZXNzaW9uIiwidXNlciIsInBhc3Nwb3J0IiwibG9naW4iLCJsb2dvdXQiLCJuYWl0ZVN0b3JlIiwiY3JlYXRlU3RvcmUiLCJydW5XaXRoQ29udGV4dCIsImNvbnRleHQiLCJmbiIsImFzeW5jTG9jYWxTdG9yYWdlIiwicnVuIiwicnVuV2l0aE1vY2tDb250ZXh0IiwiT2JqZWN0IiwiYXNzaWduIiwidGl0bGUiLCJnZXRBbGxUcmFjZXMi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
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZXN0aW5nL2Jvb3RzdHJhcC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBhZnRlckFsbCxcbiAgYWZ0ZXJFYWNoLFxuICBiZWZvcmVBbGwsXG4gIGJlZm9yZUVhY2gsXG4gIHR5cGUgVGVzdEZ1bmN0aW9uLFxuICB0eXBlIFRlc3RPcHRpb25zLFxuICB0eXBlIFZpdGVzdFV0aWxzLFxuICB0ZXN0IGFzIHZpdGVzdFRlc3QsXG59IGZyb20gXCJ2aXRlc3RcIjtcbmltcG9ydCB0eXBlIHsgQ29udGV4dCB9IGZyb20gXCIuLi9hcGkvY29udGV4dFwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IERCIH0gZnJvbSBcIi4uL2RhdGFiYXNlL2RiXCI7XG5pbXBvcnQgeyBOYWl0ZSwgdHlwZSBTZXJpYWxpemVkVHJhY2UgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IE5haXRlUmVwb3J0ZXIgfSBmcm9tIFwiLi4vbmFpdGUvbmFpdGUtcmVwb3J0ZXJcIjtcblxuZXhwb3J0IGludGVyZmFjZSBCb290c3RyYXBPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNvbmFtdSDstIjquLDtmZQg66qo65Oc66W8IOyngOygle2VqeuLiOuLpC5cbiAgICogLSB0cnVlICjquLDrs7jqsJIpOiDthYzsiqTtjIUg66qo65Oc66GcIOy0iOq4sO2ZlCAo67mg66aELCBTeW5jZXIvVGFzayDsg53rnrUpXG4gICAqIC0gZmFsc2U6IOyghOyytCDstIjquLDtmZQgKFN5bmNlciwgVGFzaywgRW50aXR5TWFuYWdlciDrk7Eg66qo65GQIOuhnOuTnClcbiAgICpcbiAgICogbWlncmF0b3IsIHN5bmNlciwgdGVtcGxhdGUg65Ox7J2YIO2FjOyKpO2KuOyXkOyEnOuKlCBmYWxzZeulvCDsgqzsmqntlanri4jri6QuXG4gICAqL1xuICBmb3JUZXN0aW5nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJvb3RzdHJhcCh2aTogVml0ZXN0VXRpbHMsIG9wdGlvbnM/OiBCb290c3RyYXBPcHRpb25zKSB7XG4gIGNvbnN0IGZvclRlc3RpbmcgPSBvcHRpb25zPy5mb3JUZXN0aW5nID8/IHRydWU7XG5cbiAgYmVmb3JlQWxsKGFzeW5jICgpID0+IHtcbiAgICBpZiAoIWZvclRlc3RpbmcpIHtcbiAgICAgIC8vIGZvclRlc3Rpbmc6IGZhbHNl7J24IOqyveyasCDsnqzstIjquLDtmZTqsIAg7ZWE7JqU7ZWY66+A66GcIO2UjOuemOq3uCDtlbTsoJxcbiAgICAgIFNvbmFtdS5pc0luaXRpYWxpemVkID0gZmFsc2U7XG4gICAgfVxuICAgIGF3YWl0IFNvbmFtdS5pbml0KHRydWUsIGZhbHNlLCB1bmRlZmluZWQsIGZvclRlc3RpbmcpO1xuICB9KTtcbiAgYmVmb3JlRWFjaChhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgREIuY3JlYXRlVGVzdFRyYW5zYWN0aW9uKCk7XG4gIH0pO1xuICBhZnRlckVhY2goYXN5bmMgKHsgdGFzayB9KSA9PiB7XG4gICAgdmkudXNlUmVhbFRpbWVycygpO1xuICAgIGF3YWl0IERCLmNsZWFyVGVzdFRyYW5zYWN0aW9uKCk7XG5cbiAgICBhd2FpdCBOYWl0ZVJlcG9ydGVyLnJlcG9ydFRlc3RSZXN1bHQoe1xuICAgICAgc3VpdGVOYW1lOiB0YXNrLnN1aXRlPy5uYW1lID8/IFwiKG5vIHN1aXRlKVwiLFxuICAgICAgc3VpdGVGaWxlUGF0aDogdGFzay5maWxlPy5maWxlcGF0aCxcbiAgICAgIHRlc3ROYW1lOiB0YXNrLm5hbWUsXG4gICAgICB0ZXN0RmlsZVBhdGg6IHRhc2suZmlsZT8uZmlsZXBhdGggPz8gXCJcIixcbiAgICAgIHRlc3RMaW5lOiB0YXNrLmxvY2F0aW9uPy5saW5lID8/IDAsXG4gICAgICBzdGF0dXM6IHRhc2sucmVzdWx0Py5zdGF0ZSA/PyBcInBhc3NcIixcbiAgICAgIGR1cmF0aW9uOiB0YXNrLnJlc3VsdD8uZHVyYXRpb24gPz8gMCxcbiAgICAgIGVycm9yOiB0YXNrLnJlc3VsdD8uZXJyb3JzPy5bMF1cbiAgICAgICAgPyB7XG4gICAgICAgICAgICBtZXNzYWdlOiB0YXNrLnJlc3VsdC5lcnJvcnNbMF0ubWVzc2FnZSxcbiAgICAgICAgICAgIHN0YWNrOiB0YXNrLnJlc3VsdC5lcnJvcnNbMF0uc3RhY2ssXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHRyYWNlczogdGFzay5tZXRhPy50cmFjZXMgPz8gW10sXG4gICAgfSk7XG4gIH0pO1xuICBhZnRlckFsbCgoKSA9PiB7fSk7XG59XG5cbmZ1bmN0aW9uIGdldE1vY2tDb250ZXh0KCk6IENvbnRleHQge1xuICByZXR1cm4ge1xuICAgIHNlc3Npb246IG51bGwsXG4gICAgdXNlcjogbnVsbCxcbiAgICBuYWl0ZVN0b3JlOiBOYWl0ZS5jcmVhdGVTdG9yZSgpLFxuICAgIGxvY2FsZTogXCJcIixcbiAgfSBhcyB1bmtub3duIGFzIENvbnRleHQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5XaXRoQ29udGV4dChjb250ZXh0OiBDb250ZXh0IHwgbnVsbCwgZm46ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgLy8gU29uYW11LmFzeW5jTG9jYWxTdG9yYWdlLnJ1buycvOuhnCBjb250ZXh0IOyEpOyglVxuICBhd2FpdCBTb25hbXUuYXN5bmNMb2NhbFN0b3JhZ2UucnVuKHsgY29udGV4dDogY29udGV4dCA/PyBnZXRNb2NrQ29udGV4dCgpIH0sIGZuKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bldpdGhNb2NrQ29udGV4dChmbjogKCkgPT4gUHJvbWlzZTx2b2lkPikge1xuICBhd2FpdCBydW5XaXRoQ29udGV4dChnZXRNb2NrQ29udGV4dCgpLCBmbik7XG59XG5cbmRlY2xhcmUgbW9kdWxlIFwidml0ZXN0XCIge1xuICBpbnRlcmZhY2UgVGFza01ldGEge1xuICAgIHRyYWNlczogU2VyaWFsaXplZFRyYWNlW107XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHRlc3QgPSBPYmplY3QuYXNzaWduKFxuICBhc3luYyAodGl0bGU6IHN0cmluZywgZm46IFRlc3RGdW5jdGlvbjxvYmplY3Q+LCBvcHRpb25zPzogVGVzdE9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4gdml0ZXN0VGVzdCh0aXRsZSwgb3B0aW9ucywgYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgIGF3YWl0IHJ1bldpdGhNb2NrQ29udGV4dChhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgZm4oY29udGV4dCk7XG4gICAgICAgICAgY29udGV4dC50YXNrLm1ldGEudHJhY2VzID0gTmFpdGUuZ2V0QWxsVHJhY2VzKCk7XG4gICAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgICBjb250ZXh0LnRhc2subWV0YS50cmFjZXMgPSBOYWl0ZS5nZXRBbGxUcmFjZXMoKTtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSxcbiAge1xuICAgIHNraXA6IGFzeW5jICh0aXRsZTogc3RyaW5nLCBmbjogVGVzdEZ1bmN0aW9uPG9iamVjdD4sIG9wdGlvbnM/OiBUZXN0T3B0aW9ucykgPT5cbiAgICAgIHZpdGVzdFRlc3Quc2tpcCh0aXRsZSwgb3B0aW9ucywgZm4pLFxuICAgIG9ubHk6IGFzeW5jICh0aXRsZTogc3RyaW5nLCBmbjogVGVzdEZ1bmN0aW9uPG9iamVjdD4sIG9wdGlvbnM/OiBUZXN0T3B0aW9ucykgPT4ge1xuICAgICAgcmV0dXJuIHZpdGVzdFRlc3Qub25seSh0aXRsZSwgb3B0aW9ucywgYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgICAgYXdhaXQgcnVuV2l0aE1vY2tDb250ZXh0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgZm4oY29udGV4dCk7XG4gICAgICAgICAgICBjb250ZXh0LnRhc2subWV0YS50cmFjZXMgPSBOYWl0ZS5nZXRBbGxUcmFjZXMoKTtcbiAgICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgICBjb250ZXh0LnRhc2subWV0YS50cmFjZXMgPSBOYWl0ZS5nZXRBbGxUcmFjZXMoKTtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgdG9kbzogKHRpdGxlOiBzdHJpbmcpID0+IHZpdGVzdFRlc3QudG9kbyh0aXRsZSksXG4gICAgZWFjaDogdml0ZXN0VGVzdC5lYWNoLmJpbmQodml0ZXN0VGVzdCkgYXMgdHlwZW9mIHZpdGVzdFRlc3QuZWFjaCxcbiAgfSxcbik7XG5cbmV4cG9ydCBjb25zdCB0ZXN0QXMgPSBPYmplY3QuYXNzaWduKFxuICBhc3luYyA8VXNlciBleHRlbmRzIENvbnRleHRbXCJ1c2VyXCJdPihcbiAgICB1c2VyOiBVc2VyLFxuICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgZm46IFRlc3RGdW5jdGlvbjxvYmplY3Q+LFxuICAgIG9wdGlvbnM/OiBUZXN0T3B0aW9ucyxcbiAgKSA9PiB7XG4gICAgcmV0dXJuIHZpdGVzdFRlc3QodGl0bGUsIG9wdGlvbnMsIGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgICBhd2FpdCBydW5XaXRoQ29udGV4dChcbiAgICAgICAge1xuICAgICAgICAgIC4uLmdldE1vY2tDb250ZXh0KCksXG4gICAgICAgICAgdXNlcixcbiAgICAgICAgfSxcbiAgICAgICAgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBmbihjb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnRleHQudGFzay5tZXRhLnRyYWNlcyA9IE5haXRlLmdldEFsbFRyYWNlcygpO1xuICAgICAgICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgICAgICAgIGNvbnRleHQudGFzay5tZXRhLnRyYWNlcyA9IE5haXRlLmdldEFsbFRyYWNlcygpO1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0pO1xuICB9LFxuICB7XG4gICAgc2tpcDogYXN5bmMgPFVzZXIgZXh0ZW5kcyBDb250ZXh0W1widXNlclwiXT4oXG4gICAgICBfdXNlcjogVXNlcixcbiAgICAgIHRpdGxlOiBzdHJpbmcsXG4gICAgICBmbjogVGVzdEZ1bmN0aW9uPG9iamVjdD4sXG4gICAgICBvcHRpb25zPzogVGVzdE9wdGlvbnMsXG4gICAgKSA9PiB2aXRlc3RUZXN0LnNraXAodGl0bGUsIG9wdGlvbnMsIGZuKSxcbiAgICBvbmx5OiBhc3luYyA8VXNlciBleHRlbmRzIENvbnRleHRbXCJ1c2VyXCJdPihcbiAgICAgIHVzZXI6IFVzZXIsXG4gICAgICB0aXRsZTogc3RyaW5nLFxuICAgICAgZm46IFRlc3RGdW5jdGlvbjxvYmplY3Q+LFxuICAgICAgb3B0aW9ucz86IFRlc3RPcHRpb25zLFxuICAgICkgPT4ge1xuICAgICAgcmV0dXJuIHZpdGVzdFRlc3Qub25seSh0aXRsZSwgb3B0aW9ucywgYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgICAgYXdhaXQgcnVuV2l0aENvbnRleHQoXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4uZ2V0TW9ja0NvbnRleHQoKSxcbiAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhd2FpdCBmbihjb250ZXh0KTtcbiAgICAgICAgICAgICAgY29udGV4dC50YXNrLm1ldGEudHJhY2VzID0gTmFpdGUuZ2V0QWxsVHJhY2VzKCk7XG4gICAgICAgICAgICB9IGNhdGNoIChlOiB1bmtub3duKSB7XG4gICAgICAgICAgICAgIGNvbnRleHQudGFzay5tZXRhLnRyYWNlcyA9IE5haXRlLmdldEFsbFRyYWNlcygpO1xuICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHRvZG86ICh0aXRsZTogc3RyaW5nKSA9PiB2aXRlc3RUZXN0LnRvZG8odGl0bGUpLFxuICB9LFxuKTtcbiJdLCJuYW1lcyI6WyJhZnRlckFsbCIsImFmdGVyRWFjaCIsImJlZm9yZUFsbCIsImJlZm9yZUVhY2giLCJ0ZXN0Iiwidml0ZXN0VGVzdCIsIlNvbmFtdSIsIkRCIiwiTmFpdGUiLCJOYWl0ZVJlcG9ydGVyIiwiYm9vdHN0cmFwIiwidmkiLCJvcHRpb25zIiwiZm9yVGVzdGluZyIsImlzSW5pdGlhbGl6ZWQiLCJpbml0IiwidW5kZWZpbmVkIiwiY3JlYXRlVGVzdFRyYW5zYWN0aW9uIiwidGFzayIsInVzZVJlYWxUaW1lcnMiLCJjbGVhclRlc3RUcmFuc2FjdGlvbiIsInJlcG9ydFRlc3RSZXN1bHQiLCJzdWl0ZU5hbWUiLCJzdWl0ZSIsIm5hbWUiLCJzdWl0ZUZpbGVQYXRoIiwiZmlsZSIsImZpbGVwYXRoIiwidGVzdE5hbWUiLCJ0ZXN0RmlsZVBhdGgiLCJ0ZXN0TGluZSIsImxvY2F0aW9uIiwibGluZSIsInN0YXR1cyIsInJlc3VsdCIsInN0YXRlIiwiZHVyYXRpb24iLCJlcnJvciIsImVycm9ycyIsIm1lc3NhZ2UiLCJzdGFjayIsInRyYWNlcyIsIm1ldGEiLCJnZXRNb2NrQ29udGV4dCIsInNlc3Npb24iLCJ1c2VyIiwibmFpdGVTdG9yZSIsImNyZWF0ZVN0b3JlIiwibG9jYWxlIiwicnVuV2l0aENvbnRleHQiLCJjb250ZXh0IiwiZm4iLCJhc3luY0xvY2FsU3RvcmFnZSIsInJ1biIsInJ1bldpdGhNb2NrQ29udGV4dCIsIk9iamVjdCIsImFzc2lnbiIsInRpdGxlIiwiZ2V0QWxsVHJhY2VzIiwiZSIsInNraXAiLCJvbmx5IiwidG9kbyIsImVhY2giLCJiaW5kIiwidGVzdEFzIiwiX3VzZXIiXSwibWFwcGluZ3MiOiJBQUFBLFNBQ0VBLFFBQVEsRUFDUkMsU0FBUyxFQUNUQyxTQUFT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
@@ -7,7 +7,6 @@ export declare function exhaustive(_param: never): void;
7
7
  export declare function assertExists<T>(value: T | null | undefined, message?: string): T;
8
8
  export declare function assertNotNull<T>(value: T | null, message?: string): T;
9
9
  export declare function assertDefined<T>(value: T | undefined, message?: string): T;
10
- export declare function chunk<T>(array: T[], size: number): T[][];
11
10
  export declare function intersectionBy<T, K>(arr1: readonly T[], arr2: readonly T[], iteratee: (item: T) => K): T[];
12
11
  export declare function differenceWith<T>(arr1: readonly T[], arr2: readonly T[], comparator: (a: T, b: T) => boolean): T[];
13
12
  export declare function merge<T extends Record<string, any>>(defaultObj: T, userObj: T): T;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAI9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,wBAAgB,eAAe,IAAI,YAAY,CAG9C;AAED,wBAAgB,eAAe,IAAI,YAAY,CAyB9C;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CAEhE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,QAEvC;AAGD,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAKhF;AAGD,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAKrE;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAK1E;AAGD,wBAAgB,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAExD;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EACjC,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GACvB,CAAC,EAAE,CAGL;AAED,wBAAgB,cAAc,CAAC,CAAC,EAC9B,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,GAClC,CAAC,EAAE,CAEL;AAGD,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAsBjF;AAcD,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,OAAO,CAM3F"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAG9C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,wBAAgB,eAAe,IAAI,YAAY,CAG9C;AAED,wBAAgB,eAAe,IAAI,YAAY,CAyB9C;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,KAAK,IAAI,WAAW,CAAC,CAAC,CAAC,CAEhE;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,KAAK,QAEvC;AAGD,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAKhF;AAGD,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAKrE;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,CAAC,CAK1E;AAGD,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EACjC,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GACvB,CAAC,EAAE,CAGL;AAED,wBAAgB,cAAc,CAAC,CAAC,EAC9B,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,IAAI,EAAE,SAAS,CAAC,EAAE,EAClB,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,OAAO,GAClC,CAAC,EAAE,CAEL;AAGD,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,CAAC,CAsBjF;AAcD,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,GAAG,OAAO,CAM3F"}
@@ -1,6 +1,5 @@
1
1
  import fs from "fs";
2
2
  import path from "path";
3
- import { cluster } from "radashi";
4
3
  export function findAppRootPath() {
5
4
  const apiRootPath = findApiRootPath();
6
5
  return path.dirname(apiRootPath);
@@ -55,10 +54,6 @@ export function assertDefined(value, message) {
55
54
  }
56
55
  return value;
57
56
  }
58
- // lodash chunk 대체 (radash cluster 사용)
59
- export function chunk(array, size) {
60
- return cluster(array, Math.ceil(array.length / size));
61
- }
62
57
  // lodash intersectionBy 대체
63
58
  export function intersectionBy(arr1, arr2, iteratee) {
64
59
  const arr2Keys = new Set(arr2.map(iteratee));
@@ -105,4 +100,4 @@ export function convertFastifyHeadersToStandard(headers) {
105
100
  return headersObj;
106
101
  }
107
102
 
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy91dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZhc3RpZnlSZXF1ZXN0IH0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBjbHVzdGVyIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB0eXBlIHsgQWJzb2x1dGVQYXRoIH0gZnJvbSBcIi4vcGF0aC11dGlsc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZEFwcFJvb3RQYXRoKCk6IEFic29sdXRlUGF0aCB7XG4gIGNvbnN0IGFwaVJvb3RQYXRoID0gZmluZEFwaVJvb3RQYXRoKCk7XG4gIHJldHVybiBwYXRoLmRpcm5hbWUoYXBpUm9vdFBhdGgpIGFzIEFic29sdXRlUGF0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRBcGlSb290UGF0aCgpOiBBYnNvbHV0ZVBhdGgge1xuICAvLyBOT1RFOiBmb3Igc3VwcG9ydCBucG0gLyB5YXJuIC8gcG5wbSB3b3Jrc3BhY2VzXG4gIC8vIO2VmOyngOunjCB3b3Jrc3BhY2Ug7JOw66m0IHByb2Nlc3MuY3dkKCkg7ZWY66m0IOuQmOuKlOuNsC4uLiDsnbTqsbQg64KY7KSR7JeQIO2YkeydmCDtm4Qg7IiY7KCV7ZWY64qU6rG466GcXG4gIGNvbnN0IHdvcmtzcGFjZVBhdGggPSBwcm9jZXNzLmVudi5QTlBNX1NDUklQVF9TUkNfRElSID8/IHByb2Nlc3MuZW52LklOSVRfQ1dEO1xuICBpZiAobm9uTnVsbGFibGUod29ya3NwYWNlUGF0aCkpIHtcbiAgICByZXR1cm4gd29ya3NwYWNlUGF0aCBhcyBBYnNvbHV0ZVBhdGg7XG4gIH1cblxuICBpZiAobm9uTnVsbGFibGUocHJvY2Vzcy5lbnYuUE5QTV9QQUNLQUdFX05BTUUpKSB7XG4gICAgcmV0dXJuIHByb2Nlc3MuY3dkKCkuc3BsaXQocGF0aC5zZXApLmpvaW4ocGF0aC5zZXApIGFzIEFic29sdXRlUGF0aDtcbiAgfVxuXG4gIGNvbnN0IGJhc2VQYXRoID0gaW1wb3J0Lm1ldGEuZmlsZW5hbWU7XG4gIGxldCBkaXIgPSBwYXRoLmRpcm5hbWUoYmFzZVBhdGgpO1xuICBpZiAoZGlyLmluY2x1ZGVzKFwiLy55YXJuL1wiKSkge1xuICAgIGRpciA9IGRpci5zcGxpdChcIi8ueWFybi9cIilbMF07XG4gIH1cblxuICBkbyB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMocGF0aC5qb2luKGRpciwgXCIvcGFja2FnZS5qc29uXCIpKSkge1xuICAgICAgcmV0dXJuIGRpci5zcGxpdChwYXRoLnNlcCkuam9pbihwYXRoLnNlcCkgYXMgQWJzb2x1dGVQYXRoO1xuICAgIH1cbiAgICBkaXIgPSBkaXIuc3BsaXQocGF0aC5zZXApLnNsaWNlKDAsIC0xKS5qb2luKHBhdGguc2VwKTtcbiAgfSB3aGlsZSAoZGlyLnNwbGl0KHBhdGguc2VwKS5sZW5ndGggPiAxKTtcbiAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgQXBwUm9vdCB1c2luZyBTb25hbXUgLTJcIik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub25OdWxsYWJsZTxUPih2YWx1ZTogVCk6IHZhbHVlIGlzIE5vbk51bGxhYmxlPFQ+IHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGhhdXN0aXZlKF9wYXJhbTogbmV2ZXIpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBleGhhdXN0aXZlYCk7XG59XG5cbi8vIOydvOuwmCDrsoTsoIRcbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRFeGlzdHM8VD4odmFsdWU6IFQgfCBudWxsIHwgdW5kZWZpbmVkLCBtZXNzYWdlPzogc3RyaW5nKTogVCB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgPz8gXCJWYWx1ZSBtdXN0IGV4aXN0XCIpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLy8gbnVsbOunjCDssrTtgaxcbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnROb3ROdWxsPFQ+KHZhbHVlOiBUIHwgbnVsbCwgbWVzc2FnZT86IHN0cmluZyk6IFQge1xuICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSA/PyBcIlZhbHVlIG11c3Qgbm90IGJlIG51bGxcIik7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuLy8gdW5kZWZpbmVk66eMIOyytO2BrFxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydERlZmluZWQ8VD4odmFsdWU6IFQgfCB1bmRlZmluZWQsIG1lc3NhZ2U/OiBzdHJpbmcpOiBUIHtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSA/PyBcIlZhbHVlIG11c3QgYmUgZGVmaW5lZFwiKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8vIGxvZGFzaCBjaHVuayDrjIDssrQgKHJhZGFzaCBjbHVzdGVyIOyCrOyaqSlcbmV4cG9ydCBmdW5jdGlvbiBjaHVuazxUPihhcnJheTogVFtdLCBzaXplOiBudW1iZXIpOiBUW11bXSB7XG4gIHJldHVybiBjbHVzdGVyKGFycmF5LCBNYXRoLmNlaWwoYXJyYXkubGVuZ3RoIC8gc2l6ZSkpO1xufVxuLy8gbG9kYXNoIGludGVyc2VjdGlvbkJ5IOuMgOyytFxuZXhwb3J0IGZ1bmN0aW9uIGludGVyc2VjdGlvbkJ5PFQsIEs+KFxuICBhcnIxOiByZWFkb25seSBUW10sXG4gIGFycjI6IHJlYWRvbmx5IFRbXSxcbiAgaXRlcmF0ZWU6IChpdGVtOiBUKSA9PiBLLFxuKTogVFtdIHtcbiAgY29uc3QgYXJyMktleXMgPSBuZXcgU2V0KGFycjIubWFwKGl0ZXJhdGVlKSk7XG4gIHJldHVybiBhcnIxLmZpbHRlcigoaXRlbSkgPT4gYXJyMktleXMuaGFzKGl0ZXJhdGVlKGl0ZW0pKSk7XG59XG4vLyBsb2Rhc2ggZGlmZmVyZW5jZVdpdGgg64yA7LK0XG5leHBvcnQgZnVuY3Rpb24gZGlmZmVyZW5jZVdpdGg8VD4oXG4gIGFycjE6IHJlYWRvbmx5IFRbXSxcbiAgYXJyMjogcmVhZG9ubHkgVFtdLFxuICBjb21wYXJhdG9yOiAoYTogVCwgYjogVCkgPT4gYm9vbGVhbixcbik6IFRbXSB7XG4gIHJldHVybiBhcnIxLmZpbHRlcigoaXRlbUEpID0+ICFhcnIyLnNvbWUoKGl0ZW1CKSA9PiBjb21wYXJhdG9yKGl0ZW1BLCBpdGVtQikpKTtcbn1cblxuLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0V4cGxpY2l0QW55OiBkeW5hbWljIHByb3BlcnR5IGFjY2Vzc1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PihkZWZhdWx0T2JqOiBULCB1c2VyT2JqOiBUKTogVCB7XG4gIC8vIOybkOuzuCDrs7TsobTsnYQg7JyE7ZW0IGRlZmF1bHRPYmog67O17IKsXG4gIGNvbnN0IHJlc3VsdCA9IHsgLi4uZGVmYXVsdE9iaiB9O1xuXG4gIC8vIHVzZXJPYmrsnZgg6rCBIOyGjeyEseydhCDsiJztmoxcbiAgZm9yIChjb25zdCBrZXkgaW4gdXNlck9iaikge1xuICAgIC8vIHVzZXJPYmrsnZggb3duIHByb3BlcnR566eMIOyymOumrCAo7ZSE66Gc7Yag7YOA7J6FIOyytOyduCDsoJzsmbgpXG4gICAgaWYgKE9iamVjdC5oYXNPd24odXNlck9iaiwga2V5KSkge1xuICAgICAgY29uc3QgdXNlclZhbHVlID0gdXNlck9ialtrZXldO1xuICAgICAgY29uc3QgZGVmYXVsdFZhbHVlID0gcmVzdWx0W2tleV07XG5cbiAgICAgIC8vIOuRkCDqsJLsnbQg66qo65GQIOqwneyytOydtOqzoCwg67Cw7Je07J20IOyVhOuLjCDqsr3smrAg7J6s6reA7KCB7Jy866GcIOuzke2VqVxuICAgICAgaWYgKGlzUGxhaW5PYmplY3QodXNlclZhbHVlKSAmJiBpc1BsYWluT2JqZWN0KGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZShkZWZhdWx0VmFsdWUsIHVzZXJWYWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyDqt7gg7Jm47J2YIOqyveyasCB1c2VyT2Jq7J2YIOqwkuycvOuhnCDrja7slrTsk7DquLBcbiAgICAgICAgcmVzdWx0W2tleV0gPSB1c2VyVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGxhaW4gb2JqZWN0IO2MkOuzhCDtl6ztjbwg7ZWo7IiYXG4vLyAo67Cw7Je0LCBudWxsLCBEYXRlIOuTseydhCDsoJzsmbjtlZwg7Iic7IiYIOqwneyytOunjCB0cnVlKVxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSAhPT0gbnVsbCAmJlxuICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJlxuICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09IFwiW29iamVjdCBPYmplY3RdXCJcbiAgKTtcbn1cblxuLy8gQ29udmVydCBGYXN0aWZ5IGhlYWRlcnMgdG8gc3RhbmRhcmQgSGVhZGVycyBvYmplY3RcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RmFzdGlmeUhlYWRlcnNUb1N0YW5kYXJkKGhlYWRlcnM6IEZhc3RpZnlSZXF1ZXN0W1wiaGVhZGVyc1wiXSk6IEhlYWRlcnMge1xuICBjb25zdCBoZWFkZXJzT2JqID0gbmV3IEhlYWRlcnMoKTtcbiAgT2JqZWN0LmVudHJpZXMoaGVhZGVycykuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgaWYgKHZhbHVlKSBoZWFkZXJzT2JqLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCkpO1xuICB9KTtcbiAgcmV0dXJuIGhlYWRlcnNPYmo7XG59XG4iXSwibmFtZXMiOlsiZnMiLCJwYXRoIiwiY2x1c3RlciIsImZpbmRBcHBSb290UGF0aCIsImFwaVJvb3RQYXRoIiwiZmluZEFwaVJvb3RQYXRoIiwiZGlybmFtZSIsIndvcmtzcGFjZVBhdGgiLCJwcm9jZXNzIiwiZW52IiwiUE5QTV9TQ1JJUFRfU1JDX0RJUiIsIklOSVRfQ1dEIiwibm9uTnVsbGFibGUiLCJQTlBNX1BBQ0tBR0VfTkFNRSIsImN3ZCIsInNwbGl0Iiwic2VwIiwiam9pbiIsImJhc2VQYXRoIiwiZmlsZW5hbWUiLCJkaXIiLCJpbmNsdWRlcyIsImV4aXN0c1N5bmMiLCJzbGljZSIsImxlbmd0aCIsIkVycm9yIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJleGhhdXN0aXZlIiwiX3BhcmFtIiwiYXNzZXJ0RXhpc3RzIiwibWVzc2FnZSIsImFzc2VydE5vdE51bGwiLCJhc3NlcnREZWZpbmVkIiwiY2h1bmsiLCJhcnJheSIsInNpemUiLCJNYXRoIiwiY2VpbCIsImludGVyc2VjdGlvbkJ5IiwiYXJyMSIsImFycjIiLCJpdGVyYXRlZSIsImFycjJLZXlzIiwiU2V0IiwibWFwIiwiZmlsdGVyIiwiaXRlbSIsImhhcyIsImRpZmZlcmVuY2VXaXRoIiwiY29tcGFyYXRvciIsIml0ZW1BIiwic29tZSIsIml0ZW1CIiwibWVyZ2UiLCJkZWZhdWx0T2JqIiwidXNlck9iaiIsInJlc3VsdCIsImtleSIsIk9iamVjdCIsImhhc093biIsInVzZXJWYWx1ZSIsImRlZmF1bHRWYWx1ZSIsImlzUGxhaW5PYmplY3QiLCJBcnJheSIsImlzQXJyYXkiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJjb252ZXJ0RmFzdGlmeUhlYWRlcnNUb1N0YW5kYXJkIiwiaGVhZGVycyIsImhlYWRlcnNPYmoiLCJIZWFkZXJzIiwiZW50cmllcyIsImZvckVhY2giLCJhcHBlbmQiXSwibWFwcGluZ3MiOiJBQUNBLE9BQU9BLFFBQVEs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
103
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy91dGlscy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEZhc3RpZnlSZXF1ZXN0IH0gZnJvbSBcImZhc3RpZnlcIjtcbmltcG9ydCBmcyBmcm9tIFwiZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgdHlwZSB7IEFic29sdXRlUGF0aCB9IGZyb20gXCIuL3BhdGgtdXRpbHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmRBcHBSb290UGF0aCgpOiBBYnNvbHV0ZVBhdGgge1xuICBjb25zdCBhcGlSb290UGF0aCA9IGZpbmRBcGlSb290UGF0aCgpO1xuICByZXR1cm4gcGF0aC5kaXJuYW1lKGFwaVJvb3RQYXRoKSBhcyBBYnNvbHV0ZVBhdGg7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQXBpUm9vdFBhdGgoKTogQWJzb2x1dGVQYXRoIHtcbiAgLy8gTk9URTogZm9yIHN1cHBvcnQgbnBtIC8geWFybiAvIHBucG0gd29ya3NwYWNlc1xuICAvLyDtlZjsp4Drp4wgd29ya3NwYWNlIOyTsOuptCBwcm9jZXNzLmN3ZCgpIO2VmOuptCDrkJjripTrjbAuLi4g7J206rG0IOuCmOykkeyXkCDtmJHsnZgg7ZuEIOyImOygle2VmOuKlOqxuOuhnFxuICBjb25zdCB3b3Jrc3BhY2VQYXRoID0gcHJvY2Vzcy5lbnYuUE5QTV9TQ1JJUFRfU1JDX0RJUiA/PyBwcm9jZXNzLmVudi5JTklUX0NXRDtcbiAgaWYgKG5vbk51bGxhYmxlKHdvcmtzcGFjZVBhdGgpKSB7XG4gICAgcmV0dXJuIHdvcmtzcGFjZVBhdGggYXMgQWJzb2x1dGVQYXRoO1xuICB9XG5cbiAgaWYgKG5vbk51bGxhYmxlKHByb2Nlc3MuZW52LlBOUE1fUEFDS0FHRV9OQU1FKSkge1xuICAgIHJldHVybiBwcm9jZXNzLmN3ZCgpLnNwbGl0KHBhdGguc2VwKS5qb2luKHBhdGguc2VwKSBhcyBBYnNvbHV0ZVBhdGg7XG4gIH1cblxuICBjb25zdCBiYXNlUGF0aCA9IGltcG9ydC5tZXRhLmZpbGVuYW1lO1xuICBsZXQgZGlyID0gcGF0aC5kaXJuYW1lKGJhc2VQYXRoKTtcbiAgaWYgKGRpci5pbmNsdWRlcyhcIi8ueWFybi9cIikpIHtcbiAgICBkaXIgPSBkaXIuc3BsaXQoXCIvLnlhcm4vXCIpWzBdO1xuICB9XG5cbiAgZG8ge1xuICAgIGlmIChmcy5leGlzdHNTeW5jKHBhdGguam9pbihkaXIsIFwiL3BhY2thZ2UuanNvblwiKSkpIHtcbiAgICAgIHJldHVybiBkaXIuc3BsaXQocGF0aC5zZXApLmpvaW4ocGF0aC5zZXApIGFzIEFic29sdXRlUGF0aDtcbiAgICB9XG4gICAgZGlyID0gZGlyLnNwbGl0KHBhdGguc2VwKS5zbGljZSgwLCAtMSkuam9pbihwYXRoLnNlcCk7XG4gIH0gd2hpbGUgKGRpci5zcGxpdChwYXRoLnNlcCkubGVuZ3RoID4gMSk7XG4gIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIEFwcFJvb3QgdXNpbmcgU29uYW11IC0yXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9uTnVsbGFibGU8VD4odmFsdWU6IFQpOiB2YWx1ZSBpcyBOb25OdWxsYWJsZTxUPiB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhoYXVzdGl2ZShfcGFyYW06IG5ldmVyKSB7XG4gIHRocm93IG5ldyBFcnJvcihgZXhoYXVzdGl2ZWApO1xufVxuXG4vLyDsnbzrsJgg67KE7KCEXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0RXhpc3RzPFQ+KHZhbHVlOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCwgbWVzc2FnZT86IHN0cmluZyk6IFQge1xuICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlID8/IFwiVmFsdWUgbXVzdCBleGlzdFwiKTtcbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8vIG51bGzrp4wg7LK07YGsXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0Tm90TnVsbDxUPih2YWx1ZTogVCB8IG51bGwsIG1lc3NhZ2U/OiBzdHJpbmcpOiBUIHtcbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgPz8gXCJWYWx1ZSBtdXN0IG5vdCBiZSBudWxsXCIpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbi8vIHVuZGVmaW5lZOunjCDssrTtgaxcbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnREZWZpbmVkPFQ+KHZhbHVlOiBUIHwgdW5kZWZpbmVkLCBtZXNzYWdlPzogc3RyaW5nKTogVCB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UgPz8gXCJWYWx1ZSBtdXN0IGJlIGRlZmluZWRcIik7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vLyBsb2Rhc2ggaW50ZXJzZWN0aW9uQnkg64yA7LK0XG5leHBvcnQgZnVuY3Rpb24gaW50ZXJzZWN0aW9uQnk8VCwgSz4oXG4gIGFycjE6IHJlYWRvbmx5IFRbXSxcbiAgYXJyMjogcmVhZG9ubHkgVFtdLFxuICBpdGVyYXRlZTogKGl0ZW06IFQpID0+IEssXG4pOiBUW10ge1xuICBjb25zdCBhcnIyS2V5cyA9IG5ldyBTZXQoYXJyMi5tYXAoaXRlcmF0ZWUpKTtcbiAgcmV0dXJuIGFycjEuZmlsdGVyKChpdGVtKSA9PiBhcnIyS2V5cy5oYXMoaXRlcmF0ZWUoaXRlbSkpKTtcbn1cbi8vIGxvZGFzaCBkaWZmZXJlbmNlV2l0aCDrjIDssrRcbmV4cG9ydCBmdW5jdGlvbiBkaWZmZXJlbmNlV2l0aDxUPihcbiAgYXJyMTogcmVhZG9ubHkgVFtdLFxuICBhcnIyOiByZWFkb25seSBUW10sXG4gIGNvbXBhcmF0b3I6IChhOiBULCBiOiBUKSA9PiBib29sZWFuLFxuKTogVFtdIHtcbiAgcmV0dXJuIGFycjEuZmlsdGVyKChpdGVtQSkgPT4gIWFycjIuc29tZSgoaXRlbUIpID0+IGNvbXBhcmF0b3IoaXRlbUEsIGl0ZW1CKSkpO1xufVxuXG4vLyBiaW9tZS1pZ25vcmUgbGludC9zdXNwaWNpb3VzL25vRXhwbGljaXRBbnk6IGR5bmFtaWMgcHJvcGVydHkgYWNjZXNzXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2U8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+KGRlZmF1bHRPYmo6IFQsIHVzZXJPYmo6IFQpOiBUIHtcbiAgLy8g7JuQ67O4IOuztOyhtOydhCDsnITtlbQgZGVmYXVsdE9iaiDrs7XsgqxcbiAgY29uc3QgcmVzdWx0ID0geyAuLi5kZWZhdWx0T2JqIH07XG5cbiAgLy8gdXNlck9iauydmCDqsIEg7IaN7ISx7J2EIOyInO2ajFxuICBmb3IgKGNvbnN0IGtleSBpbiB1c2VyT2JqKSB7XG4gICAgLy8gdXNlck9iauydmCBvd24gcHJvcGVydHnrp4wg7LKY66asICjtlITroZzthqDtg4DsnoUg7LK07J24IOygnOyZuClcbiAgICBpZiAoT2JqZWN0Lmhhc093bih1c2VyT2JqLCBrZXkpKSB7XG4gICAgICBjb25zdCB1c2VyVmFsdWUgPSB1c2VyT2JqW2tleV07XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSByZXN1bHRba2V5XTtcblxuICAgICAgLy8g65GQIOqwkuydtCDrqqjrkZAg6rCd7LK07J206rOgLCDrsLDsl7TsnbQg7JWE64uMIOqyveyasCDsnqzqt4DsoIHsnLzroZwg67OR7ZWpXG4gICAgICBpZiAoaXNQbGFpbk9iamVjdCh1c2VyVmFsdWUpICYmIGlzUGxhaW5PYmplY3QoZGVmYXVsdFZhbHVlKSkge1xuICAgICAgICByZXN1bHRba2V5XSA9IG1lcmdlKGRlZmF1bHRWYWx1ZSwgdXNlclZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIOq3uCDsmbjsnZgg6rK97JqwIHVzZXJPYmrsnZgg6rCS7Jy866GcIOuNruyWtOyTsOq4sFxuICAgICAgICByZXN1bHRba2V5XSA9IHVzZXJWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBwbGFpbiBvYmplY3Qg7YyQ67OEIO2XrO2NvCDtlajsiJhcbi8vICjrsLDsl7QsIG51bGwsIERhdGUg65Ox7J2EIOygnOyZuO2VnCDsiJzsiJgg6rCd7LK066eMIHRydWUpXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICByZXR1cm4gKFxuICAgIHZhbHVlICE9PSBudWxsICYmXG4gICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIlxuICApO1xufVxuXG4vLyBDb252ZXJ0IEZhc3RpZnkgaGVhZGVycyB0byBzdGFuZGFyZCBIZWFkZXJzIG9iamVjdFxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRGYXN0aWZ5SGVhZGVyc1RvU3RhbmRhcmQoaGVhZGVyczogRmFzdGlmeVJlcXVlc3RbXCJoZWFkZXJzXCJdKTogSGVhZGVycyB7XG4gIGNvbnN0IGhlYWRlcnNPYmogPSBuZXcgSGVhZGVycygpO1xuICBPYmplY3QuZW50cmllcyhoZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICBpZiAodmFsdWUpIGhlYWRlcnNPYmouYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoKSk7XG4gIH0pO1xuICByZXR1cm4gaGVhZGVyc09iajtcbn1cbiJdLCJuYW1lcyI6WyJmcyIsInBhdGgiLCJmaW5kQXBwUm9vdFBhdGgiLCJhcGlSb290UGF0aCIsImZpbmRBcGlSb290UGF0aCIsImRpcm5hbWUiLCJ3b3Jrc3BhY2VQYXRoIiwicHJvY2VzcyIsImVudiIsIlBOUE1fU0NSSVBUX1NSQ19ESVIiLCJJTklUX0NXRCIsIm5vbk51bGxhYmxlIiwiUE5QTV9QQUNLQUdFX05BTUUiLCJjd2QiLCJzcGxpdCIsInNlcCIsImpvaW4iLCJiYXNlUGF0aCIsImZpbGVuYW1lIiwiZGlyIiwiaW5jbHVkZXMiLCJleGlzdHNTeW5jIiwic2xpY2UiLCJsZW5ndGgiLCJFcnJvciIsInZhbHVlIiwidW5kZWZpbmVkIiwiZXhoYXVzdGl2ZSIsIl9wYXJhbSIsImFzc2VydEV4aXN0cyIsIm1lc3NhZ2UiLCJhc3NlcnROb3ROdWxsIiwiYXNzZXJ0RGVmaW5lZCIsImludGVyc2VjdGlvbkJ5IiwiYXJyMSIsImFycjIiLCJpdGVyYXRlZSIsImFycjJLZXlzIiwiU2V0IiwibWFwIiwiZmlsdGVyIiwiaXRlbSIsImhhcyIsImRpZmZlcmVuY2VXaXRoIiwiY29tcGFyYXRvciIsIml0ZW1BIiwic29tZSIsIml0ZW1CIiwibWVyZ2UiLCJkZWZhdWx0T2JqIiwidXNlck9iaiIsInJlc3VsdCIsImtleSIsIk9iamVjdCIsImhhc093biIsInVzZXJWYWx1ZSIsImRlZmF1bHRWYWx1ZSIsImlzUGxhaW5PYmplY3QiLCJBcnJheSIsImlzQXJyYXkiLCJwcm90b3R5cGUiLCJ0b1N0cmluZyIsImNhbGwiLCJjb252ZXJ0RmFzdGlmeUhlYWRlcnNUb1N0YW5kYXJkIiwiaGVhZGVycyIsImhlYWRlcnNPYmoiLCJIZWFkZXJzIiwiZW50cmllcyIsImZvckVhY2giLCJhcHBlbmQiXSwibWFwcGluZ3MiOiJBQUNBLE9BQU9BLFFBQVEsS0FBSztBQUNwQixPQUFPQyxVQUFVLE9BQU87QUFHeEIsT0FBTyxTQUFTQztJQUNkLE1BQU1DLGNBQWNDO0lBQ3BCLE9BQU9ILEtBQUtJLE9BQU8sQ0FBQ0Y7QUFDdEI7QUFFQSxPQUFPLFNBQVNDO0lBQ2QsaURBQWlEO0lBQ2pELDhEQUE4RDtJQUM5RCxNQUFNRSxnQkFBZ0JDLFFBQVFDLEdBQUcsQ0FBQ0MsbUJBQW1CLElBQUlGLFFBQVFDLEdBQUcsQ0FBQ0UsUUFBUTtJQUM3RSxJQUFJQyxZQUFZTCxnQkFBZ0I7UUFDOUIsT0FBT0E7SUFDVDtJQUVB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sonamu",
3
- "version": "0.8.26",
3
+ "version": "0.8.28",
4
4
  "description": "Sonamu — TypeScript Fullstack API Framework",
5
5
  "keywords": [
6
6
  "typescript",
@@ -115,7 +115,7 @@
115
115
  "fastify-sse-v2": "^4.2.1",
116
116
  "flydrive": "^1.3.0",
117
117
  "inflection": "^3.0.2",
118
- "knex": "^3.1.0",
118
+ "knex": "^3.2.9",
119
119
  "mime-types": "^3.0.1",
120
120
  "minimatch": "^10.0.3",
121
121
  "node-cron": "^4.2.1",
@@ -128,9 +128,9 @@
128
128
  "vite": "7.3.0",
129
129
  "vitest": "^4.0.10",
130
130
  "@sonamu-kit/hmr-hook": "^0.4.1",
131
- "@sonamu-kit/hmr-runner": "^0.1.1",
131
+ "@sonamu-kit/tasks": "^0.2.0",
132
132
  "@sonamu-kit/ts-loader": "^2.1.3",
133
- "@sonamu-kit/tasks": "^0.2.0"
133
+ "@sonamu-kit/hmr-runner": "^0.1.1"
134
134
  },
135
135
  "devDependencies": {
136
136
  "@biomejs/biome": "^2.3.13",
@@ -159,7 +159,7 @@
159
159
  "better-auth": "~1.4.18",
160
160
  "fastify": "^4",
161
161
  "ioredis": "^5.8.2",
162
- "knex": "^3.1.0",
162
+ "knex": "^3.2.9",
163
163
  "pgvector": "^0.2.1",
164
164
  "typescript": "^5.9.3",
165
165
  "voyageai": "^0.0.8",
@@ -1,7 +1,7 @@
1
1
  /** biome-ignore-all lint/suspicious/noExplicitAny: Puri의 타입은 개별 모델에서 확정되므로 BaseModel에서는 any를 허용함 */
2
2
  import { getLogger, type Logger } from "@logtape/logtape";
3
3
  import type { Knex } from "knex";
4
- import { cloneDeep, group, isObject, omit, set } from "radashi";
4
+ import { cloneDeep, cluster, group, isObject, omit, set } from "radashi";
5
5
  import { type ListResult, normalizeFilterQuery, validateSonamuFilters } from "..";
6
6
  import { Sonamu } from "../api";
7
7
  import { EntityManager } from "../entity/entity-manager";
@@ -9,7 +9,6 @@ import type { FilterOperator, FilterQuery } from "../filter/types";
9
9
  import { convertDomainToCategory } from "../logger/category";
10
10
  import type { DatabaseSchemaExtend, SonamuQueryMode } from "../types/types";
11
11
  import { getJoinTables, getTableNamesFromWhere } from "../utils/sql-parser";
12
- import { chunk } from "../utils/utils";
13
12
  import type { EnhancerMap, ResolveSubsetIntersection } from "./base-model.types";
14
13
  import type { DBPreset } from "./db";
15
14
  import { DB } from "./db";
@@ -91,7 +90,7 @@ export class BaseModelClass<
91
90
  }
92
91
 
93
92
  let resultIds: number[] = [];
94
- for (const items of chunk(unqKeys, chunkSize)) {
93
+ for (const items of cluster(unqKeys, chunkSize)) {
95
94
  const dbRows = await wdb(tableName)
96
95
  .select("id", wdb.raw(selectField))
97
96
  .whereIn(whereInField as string, items);
@@ -12,12 +12,20 @@ export function createKnexInstance(config: Knex.Config): Knex {
12
12
  }
13
13
 
14
14
  config.pool = {
15
+ maxConnectionLifetimeMillis: 1800000,
16
+ maxConnectionLifetimeJitterMillis: 300000,
15
17
  ...(config.pool ?? {}),
16
18
  propagateCreateError: false,
17
19
  idleTimeoutMillis: 10000,
18
20
  reapIntervalMillis: 1000,
19
21
  acquireTimeoutMillis: 30000,
20
22
  createTimeoutMillis: 30000,
23
+ validate: (connection: unknown) => {
24
+ if (typeof connection !== "object" || connection === null) return false;
25
+ const conn = connection as Record<string, unknown>;
26
+ if (conn._ending === true || conn._closed === true) return false;
27
+ return true;
28
+ },
21
29
  afterCreate: ((
22
30
  conn: Knex.Client & Record<string, unknown>,
23
31
  done: (err: Error | null, conn: Knex.Client) => void,
@@ -30,27 +38,9 @@ export function createKnexInstance(config: Knex.Config): Knex {
30
38
  stream.stream.setKeepAlive(true, 10000);
31
39
  }
32
40
 
33
- conn.on("error", (err: Error) => {
34
- Object.defineProperty(conn, "__knex__disposed", {
35
- value: err,
36
- writable: true,
37
- configurable: true,
38
- enumerable: true,
39
- });
40
- });
41
-
42
41
  done(null, conn);
43
42
  }) satisfies Knex.PoolConfig["afterCreate"],
44
43
  };
45
44
 
46
- const knexInstance = knex(config);
47
- knexInstance.client.validateConnection = (connection: unknown) => {
48
- if (typeof connection !== "object" || connection === null) return false;
49
- if ("__knex__disposed" in connection) return false;
50
- const conn = connection as Record<string, unknown>;
51
- if (conn._ending === true || conn._closed === true) return false;
52
- return true;
53
- };
54
-
55
- return knexInstance;
45
+ return knex(config);
56
46
  }
@@ -223,23 +223,23 @@ export class Puri<TSchema, TTables extends Record<string, any>, TResult> {
223
223
  }
224
224
 
225
225
  // Raw functions for SELECT
226
- static rawString(sql: string, params: unknown[] = []): SqlExpression<"string"> {
226
+ static rawString(sql: string, params: Knex.RawBinding[] = []): SqlExpression<"string"> {
227
227
  return { _type: "sql_expression", _return: "string", _sql: sql, _params: params };
228
228
  }
229
229
 
230
- static rawStringArray(sql: string, params: unknown[] = []): SqlExpression<"string[]"> {
230
+ static rawStringArray(sql: string, params: Knex.RawBinding[] = []): SqlExpression<"string[]"> {
231
231
  return { _type: "sql_expression", _return: "string[]", _sql: sql, _params: params };
232
232
  }
233
233
 
234
- static rawNumber(sql: string, params: unknown[] = []): SqlExpression<"number"> {
234
+ static rawNumber(sql: string, params: Knex.RawBinding[] = []): SqlExpression<"number"> {
235
235
  return { _type: "sql_expression", _return: "number", _sql: sql, _params: params };
236
236
  }
237
237
 
238
- static rawBoolean(sql: string, params: unknown[] = []): SqlExpression<"boolean"> {
238
+ static rawBoolean(sql: string, params: Knex.RawBinding[] = []): SqlExpression<"boolean"> {
239
239
  return { _type: "sql_expression", _return: "boolean", _sql: sql, _params: params };
240
240
  }
241
241
 
242
- static rawDate(sql: string, params: unknown[] = []): SqlExpression<"date"> {
242
+ static rawDate(sql: string, params: Knex.RawBinding[] = []): SqlExpression<"date"> {
243
243
  return { _type: "sql_expression", _return: "date", _sql: sql, _params: params };
244
244
  }
245
245
 
@@ -812,7 +812,7 @@ export class Puri<TSchema, TTables extends Record<string, any>, TResult> {
812
812
  }
813
813
 
814
814
  // WHERE RAW
815
- whereRaw(sql: string, bindings?: readonly unknown[]): this {
815
+ whereRaw(sql: string, bindings?: readonly Knex.RawBinding[]): this {
816
816
  this.knexQuery.whereRaw(sql, bindings);
817
817
  return this;
818
818
  }
@@ -1,5 +1,6 @@
1
1
  /** biome-ignore-all lint/suspicious/noExplicitAny: Puri.types.ts는 다양한 타입을 사용하고 있습니다. */
2
2
 
3
+ import type { Knex } from "knex";
3
4
  import type { QueryResult } from "pg";
4
5
  import type { DatabaseForeignKeys, DatabaseSchemaExtend } from "../types/types";
5
6
  import type { Puri } from "./puri";
@@ -311,7 +312,7 @@ export type SqlExpression<
311
312
  _type: "sql_expression"; // 또는 "computed_value"
312
313
  _return: T;
313
314
  _sql: string;
314
- _params: unknown[];
315
+ _params: Knex.RawBinding[];
315
316
  };
316
317
 
317
318
  // 결과 타입 가독성을 위한 타입 확장
@@ -1,11 +1,11 @@
1
1
  import { getLogger } from "@logtape/logtape";
2
2
  import { randomUUID } from "crypto";
3
3
  import type { Knex } from "knex";
4
- import { isArray, unique } from "radashi";
4
+ import { cluster, isArray, unique } from "radashi";
5
5
  import { EntityManager } from "../entity/entity-manager";
6
6
  import { Naite } from "../naite/naite";
7
7
  import type { DatabaseForeignKeys, DatabaseSchemaExtend, EntityIndex } from "../types/types";
8
- import { assertDefined, chunk, nonNullable } from "../utils/utils";
8
+ import { assertDefined, nonNullable } from "../utils/utils";
9
9
  import { batchUpdate, type RowWithId } from "./_batch_update";
10
10
  import type { ColumnKeys, ForeignKeyColumns, IdType, TableName } from "./puri.types";
11
11
 
@@ -290,7 +290,7 @@ export class UpsertBuilder {
290
290
 
291
291
  // 현재 레벨 upsert
292
292
  const chunkSize = options?.chunkSize;
293
- const levelChunks = chunkSize ? chunk(resolvedRows, chunkSize) : [resolvedRows];
293
+ const levelChunks = chunkSize ? cluster(resolvedRows, chunkSize) : [resolvedRows];
294
294
  const selectFields = unique(["id", ...extractFields]);
295
295
 
296
296
  for (let index = 0; index < levelChunks.length; index++) {
@@ -451,7 +451,7 @@ export class UpsertBuilder {
451
451
 
452
452
  // 각 FK 컬럼에 대한 WHERE IN 조건 추가
453
453
  for (const { column, values } of fkConditions) {
454
- deleteQuery = deleteQuery.whereIn(column, values);
454
+ deleteQuery = deleteQuery.whereIn(column, values as Knex.Value[]);
455
455
  }
456
456
 
457
457
  // 방금 upsert한 ID는 제외
@@ -24,7 +24,7 @@ import type { WorkflowMetadata } from "./decorator";
24
24
  import { StepWrapper } from "./step-wrapper";
25
25
 
26
26
  export interface WorkflowOptions {
27
- // worker에서 동시 실행할 태스크 수, 기본은 CPU 코어 수 - 1
27
+ // worker에서 동시 실행할 태스크 수, 기본은 1
28
28
  concurrency?: number;
29
29
 
30
30
  // worker에서 사용할 pub/sub 여부, 기본은 true
@@ -288,11 +288,9 @@ export class WorkflowManager {
288
288
  headers: {},
289
289
  createSSE: (schema: ZodObject) => createMockSSEFactory(schema),
290
290
  naiteStore: Naite.createStore(),
291
+ locale: "",
291
292
  user: null,
292
- passport: {
293
- login: async () => {},
294
- logout: () => {},
295
- },
293
+ session: null,
296
294
  } as unknown as Context;
297
295
 
298
296
  const contextProvider = Sonamu.config.tasks?.contextProvider;
@@ -64,14 +64,10 @@ export function bootstrap(vi: VitestUtils, options?: BootstrapOptions) {
64
64
 
65
65
  function getMockContext(): Context {
66
66
  return {
67
- ip: "127.0.0.1",
68
- session: {},
67
+ session: null,
69
68
  user: null,
70
- passport: {
71
- login: async () => {},
72
- logout: () => {},
73
- },
74
69
  naiteStore: Naite.createStore(),
70
+ locale: "",
75
71
  } as unknown as Context;
76
72
  }
77
73
 
@@ -1,7 +1,6 @@
1
1
  import type { FastifyRequest } from "fastify";
2
2
  import fs from "fs";
3
3
  import path from "path";
4
- import { cluster } from "radashi";
5
4
  import type { AbsolutePath } from "./path-utils";
6
5
 
7
6
  export function findAppRootPath(): AbsolutePath {
@@ -67,10 +66,6 @@ export function assertDefined<T>(value: T | undefined, message?: string): T {
67
66
  return value;
68
67
  }
69
68
 
70
- // lodash chunk 대체 (radash cluster 사용)
71
- export function chunk<T>(array: T[], size: number): T[][] {
72
- return cluster(array, Math.ceil(array.length / size));
73
- }
74
69
  // lodash intersectionBy 대체
75
70
  export function intersectionBy<T, K>(
76
71
  arr1: readonly T[],