sonamu 0.5.2 → 0.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/code-converters.js +1 -1
- package/dist/api/code-converters.js.map +1 -1
- package/dist/api/decorators.d.ts +6 -1
- package/dist/api/decorators.d.ts.map +1 -1
- package/dist/api/decorators.js +1 -1
- package/dist/api/decorators.js.map +1 -1
- package/dist/bin/cli-wrapper.js +1 -1
- package/dist/bin/cli-wrapper.js.map +1 -1
- package/dist/database/puri-wrapper.d.ts +8 -1
- package/dist/database/puri-wrapper.d.ts.map +1 -1
- package/dist/database/puri-wrapper.js +1 -1
- package/dist/database/puri-wrapper.js.map +1 -1
- package/dist/database/puri.d.ts +2 -0
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +1 -1
- package/dist/database/puri.js.map +1 -1
- package/dist/database/puri.types.d.ts +4 -8
- package/dist/database/puri.types.d.ts.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/migration/code-generation.js +1 -1
- package/dist/migration/code-generation.js.map +1 -1
- package/dist/migration/types.d.ts +2 -1
- package/dist/migration/types.d.ts.map +1 -1
- package/dist/syncer/syncer.d.ts +1 -0
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/templates/generated_http.template.d.ts.map +1 -1
- package/dist/templates/generated_http.template.js +1 -1
- package/dist/templates/generated_http.template.js.map +1 -1
- package/dist/templates/generated_sso.template.d.ts.map +1 -1
- package/dist/templates/generated_sso.template.js +1 -1
- package/dist/templates/generated_sso.template.js.map +1 -1
- package/dist/templates/service.template.d.ts.map +1 -1
- package/dist/templates/service.template.js +1 -1
- package/dist/templates/service.template.js.map +1 -1
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +1 -1
- package/dist/testing/fixture-manager.js.map +1 -1
- package/package.json +7 -2
- package/src/api/code-converters.ts +1 -1
- package/src/api/decorators.ts +23 -9
- package/src/bin/cli-wrapper.ts +1 -1
- package/src/database/puri-wrapper.ts +24 -4
- package/src/database/puri.ts +128 -25
- package/src/database/puri.types.ts +46 -41
- package/src/index.ts +2 -1
- package/src/migration/code-generation.ts +3 -3
- package/src/migration/types.ts +2 -1
- package/src/templates/generated_http.template.ts +42 -11
- package/src/templates/generated_sso.template.ts +3 -1
- package/src/templates/service.template.ts +20 -7
- package/src/testing/fixture-manager.ts +2 -0
- package/.swcrc +0 -15
- package/import-to-require.js +0 -27
- package/nodemon.json +0 -6
- package/tsconfig.json +0 -56
- package/tsup.config.js +0 -47
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/templates/generated_sso.template.ts"],"sourcesContent":["import {\n isManyToManyRelationProp,\n SubsetQuery,\n TemplateOptions,\n} from \"../types/types\";\nimport { EntityManager } from \"../entity/entity-manager\";\nimport { Template } from \"./base-template\";\nimport inflection from \"inflection\";\nimport { SourceCode } from \"./generated.template\";\nimport _ from \"lodash\";\nimport { nonNullable } from \"../utils/utils\";\nimport { Sonamu } from \"../api\";\nimport { Entity } from \"../entity/entity\";\n\nexport class Template__generated_sso extends Template {\n constructor() {\n super(\"generated_sso\");\n }\n\n getTargetAndPath() {\n const { dir } = Sonamu.config.api;\n\n return {\n target: `${dir}/src/application`,\n path: `sonamu.generated.sso.ts`,\n };\n }\n\n render({}: TemplateOptions[\"generated_sso\"]) {\n const entityIds = EntityManager.getAllIds();\n const entities = entityIds.map((id) => EntityManager.get(id));\n\n const sourceCodes: SourceCode[] = entities\n .map((entity) => {\n if (\n entity.parentId !== undefined ||\n Object.keys(entity.subsets).length === 0\n ) {\n return null;\n }\n const subsetKeys = Object.keys(entity.subsets);\n const subsetQueryObject = subsetKeys.reduce(\n (r, subsetKey) => {\n const subsetQuery = entity.getSubsetQuery(subsetKey);\n r[subsetKey] = subsetQuery;\n return r;\n },\n {} as {\n [key: string]: SubsetQuery;\n }\n );\n\n const subsetKeyTypeName = `${entity.names.module}SubsetKey`;\n return {\n label: `SubsetQuery: ${entity.id}`,\n lines: [\n `export const ${inflection.camelize(\n entity.id,\n true\n )}SubsetQueries:{ [key in ${subsetKeyTypeName}]: SubsetQuery} = ${JSON.stringify(\n subsetQueryObject\n )};`,\n \"\",\n ],\n importKeys: [subsetKeyTypeName],\n };\n })\n .filter(nonNullable);\n\n // DatabaseSchema 생성\n const dbSchemaSourceCode = this.getDatabaseSchemaSourceCode(entities);\n if (dbSchemaSourceCode) {\n sourceCodes.push(dbSchemaSourceCode);\n }\n\n const sourceCode = sourceCodes.reduce(\n (result, ts) => {\n if (ts === null) {\n return result;\n }\n return {\n lines: [...result!.lines, `// ${ts.label}`, ...ts.lines, \"\"],\n importKeys: _.uniq([...result!.importKeys, ...ts.importKeys]),\n };\n },\n {\n lines: [],\n importKeys: [],\n } as Omit<SourceCode, \"label\">\n );\n\n return {\n ...this.getTargetAndPath(),\n body: sourceCode.lines.join(\"\\n\"),\n importKeys: sourceCode.importKeys,\n customHeaders: [\n `import { SubsetQuery, ManyToManyBaseSchema } from \"sonamu\";`,\n ],\n };\n }\n\n getDatabaseSchemaSourceCode(entities: Entity[]): SourceCode | null {\n if (entities.length === 0) {\n return null;\n }\n\n const entitySchemaLines = entities.map(\n (entity) => `${entity.table}: ${entity.id}BaseSchema;`\n );\n\n const joinTableSchemaLines = _.uniq(\n entities.flatMap((entity) =>\n entity.props.filter(isManyToManyRelationProp).map((prop) => {\n const fromTableKey = inflection.singularize(entity.table);\n const toTableKey = inflection.singularize(\n EntityManager.get(prop.with).table\n );\n return `${prop.joinTable}: ManyToManyBaseSchema<\"${fromTableKey}\", \"${toTableKey}\">;`;\n })\n )\n );\n\n return {\n label: `DatabaseSchema`,\n lines: [\n `declare module \"sonamu\" {`,\n ` export interface DatabaseSchemaExtend {`,\n ...entitySchemaLines,\n ...joinTableSchemaLines,\n ` }`,\n `}`,\n ],\n importKeys: entities.map((entity) => `${entity.id}BaseSchema`),\n };\n }\n}\n"],"names":["Template__generated_sso","getTargetAndPath","dir","Sonamu","config","api","target","path","render","entityIds","EntityManager","getAllIds","entities","map","id","get","sourceCodes","entity","parentId","undefined","Object","keys","subsets","length","subsetKeys","subsetQueryObject","reduce","r","subsetKey","subsetQuery","getSubsetQuery","subsetKeyTypeName","names","module","label","lines","inflection","camelize","JSON","stringify","importKeys","filter","nonNullable","dbSchemaSourceCode","getDatabaseSchemaSourceCode","push","sourceCode","result","ts","_","uniq","body","join","customHeaders","entitySchemaLines","table","joinTableSchemaLines","flatMap","props","isManyToManyRelationProp","prop","fromTableKey","singularize","toTableKey","with","joinTable","Template"],"mappings":"oGAcaA,iEAAAA,8CAVN,6CACuB,sDACL,iFACF,yEAET,8BACc,mCACL,itJAGhB,IAAA,AAAMA,qCAAN,0CAAMA,2CAAAA,iDAAAA,yBAET,OAAA,iBAFSA,yBAEH,gCAFGA,0BAKXC,IAAAA,yBAAAA,SAAAA,mBACE,IAAM,AAAEC,IAAQC,WAAM,CAACC,MAAM,CAACC,GAAG,CAAzBH,IAER,MAAO,CACLI,OAAQ,AAAC,GAAM,OAAJJ,IAAI,oBACfK,KAAM,yBACR,CACF,IAEAC,IAAAA,eAAAA,SAAAA,OAAO,KAAoC,MAApC,gCAAA,OACL,IAAMC,UAAYC,4BAAa,CAACC,SAAS,GACzC,IAAMC,SAAWH,UAAUI,GAAG,CAAC,SAACC,WAAOJ,4BAAa,CAACK,GAAG,CAACD,MAEzD,IAAME,YAA4BJ,SAC/BC,GAAG,CAAC,SAACI,QACJ,GACEA,OAAOC,QAAQ,GAAKC,WACpBC,OAAOC,IAAI,CAACJ,OAAOK,OAAO,EAAEC,MAAM,GAAK,EACvC,CACA,OAAO,IACT,CACA,IAAMC,WAAaJ,OAAOC,IAAI,CAACJ,OAAOK,OAAO,EAC7C,IAAMG,kBAAoBD,WAAWE,MAAM,CACzC,SAACC,EAAGC,WACF,IAAMC,YAAcZ,OAAOa,cAAc,CAACF,UAC1CD,CAAAA,CAAC,CAACC,UAAU,CAAGC,YACf,OAAOF,CACT,EACA,CAAC,GAKH,IAAMI,kBAAoB,AAAC,GAAsB,OAApBd,OAAOe,KAAK,CAACC,MAAM,CAAC,aACjD,MAAO,CACLC,MAAO,AAAC,gBAAyB,OAAVjB,OAAOH,EAAE,EAChCqB,MAAO,CACL,AAAC,gBAG2BJ,OAHZK,mBAAU,CAACC,QAAQ,CACjCpB,OAAOH,EAAE,CACT,MACA,4BAAgEwB,OAAtCP,kBAAkB,sBAE5C,OAFgEO,KAAKC,SAAS,CAC9Ed,mBACA,KACF,GACD,CACDe,WAAY,CAACT,kBAAkB,AACjC,CACF,GACCU,MAAM,CAACC,kBAAW,EAGrB,IAAMC,mBAAqB,IAAI,CAACC,2BAA2B,CAAChC,UAC5D,GAAI+B,mBAAoB,CACtB3B,YAAY6B,IAAI,CAACF,mBACnB,CAEA,IAAMG,WAAa9B,YAAYU,MAAM,CACnC,SAACqB,OAAQC,IACP,GAAIA,KAAO,KAAM,CACf,OAAOD,MACT,CACA,MAAO,CACLZ,MAAO,AAAC,qBAAGY,OAAQZ,KAAK,SAAjB,CAAmB,AAAC,MAAc,OAATa,GAAGd,KAAK,EAAoB,CAAhB,qBAAGc,GAAGb,KAAK,EAAhD,CAAkD,GAAG,EAC5DK,WAAYS,eAAC,CAACC,IAAI,CAAC,AAAC,qBAAGH,OAAQP,UAAU,SAAE,qBAAGQ,GAAGR,UAAU,GAC7D,CACF,EACA,CACEL,MAAO,EAAE,CACTK,WAAY,EAAE,AAChB,GAGF,OAAO,uCACF,IAAI,
|
|
1
|
+
{"version":3,"sources":["../../src/templates/generated_sso.template.ts"],"sourcesContent":["import {\n isManyToManyRelationProp,\n SubsetQuery,\n TemplateOptions,\n} from \"../types/types\";\nimport { EntityManager } from \"../entity/entity-manager\";\nimport { Template } from \"./base-template\";\nimport inflection from \"inflection\";\nimport { SourceCode } from \"./generated.template\";\nimport _ from \"lodash\";\nimport { nonNullable } from \"../utils/utils\";\nimport { Sonamu } from \"../api\";\nimport { Entity } from \"../entity/entity\";\n\nexport class Template__generated_sso extends Template {\n constructor() {\n super(\"generated_sso\");\n }\n\n getTargetAndPath() {\n const { dir } = Sonamu.config.api;\n\n return {\n target: `${dir}/src/application`,\n path: `sonamu.generated.sso.ts`,\n };\n }\n\n render({}: TemplateOptions[\"generated_sso\"]) {\n const entityIds = EntityManager.getAllIds();\n const entities = entityIds.map((id) => EntityManager.get(id));\n\n const sourceCodes: SourceCode[] = entities\n .map((entity) => {\n if (\n entity.parentId !== undefined ||\n Object.keys(entity.subsets).length === 0\n ) {\n return null;\n }\n const subsetKeys = Object.keys(entity.subsets);\n const subsetQueryObject = subsetKeys.reduce(\n (r, subsetKey) => {\n const subsetQuery = entity.getSubsetQuery(subsetKey);\n r[subsetKey] = subsetQuery;\n return r;\n },\n {} as {\n [key: string]: SubsetQuery;\n }\n );\n\n const subsetKeyTypeName = `${entity.names.module}SubsetKey`;\n return {\n label: `SubsetQuery: ${entity.id}`,\n lines: [\n `export const ${inflection.camelize(\n entity.id,\n true\n )}SubsetQueries:{ [key in ${subsetKeyTypeName}]: SubsetQuery} = ${JSON.stringify(\n subsetQueryObject\n )};`,\n \"\",\n ],\n importKeys: [subsetKeyTypeName],\n };\n })\n .filter(nonNullable);\n\n // DatabaseSchema 생성\n const dbSchemaSourceCode = this.getDatabaseSchemaSourceCode(entities);\n if (dbSchemaSourceCode) {\n sourceCodes.push(dbSchemaSourceCode);\n }\n\n const sourceCode = sourceCodes.reduce(\n (result, ts) => {\n if (ts === null) {\n return result;\n }\n return {\n lines: [...result!.lines, `// ${ts.label}`, ...ts.lines, \"\"],\n importKeys: _.uniq([...result!.importKeys, ...ts.importKeys]),\n };\n },\n {\n lines: [],\n importKeys: [],\n } as Omit<SourceCode, \"label\">\n );\n\n const body = sourceCode.lines.join(\"\\n\");\n const isUsingManyToManyBaseSchema = body.includes(\"ManyToManyBaseSchema\");\n return {\n ...this.getTargetAndPath(),\n body: sourceCode.lines.join(\"\\n\"),\n importKeys: sourceCode.importKeys,\n customHeaders: [\n `import { SubsetQuery, ${isUsingManyToManyBaseSchema ? \"ManyToManyBaseSchema\" : \"\"} } from \"sonamu\";`,\n ],\n };\n }\n\n getDatabaseSchemaSourceCode(entities: Entity[]): SourceCode | null {\n if (entities.length === 0) {\n return null;\n }\n\n const entitySchemaLines = entities.map(\n (entity) => `${entity.table}: ${entity.id}BaseSchema;`\n );\n\n const joinTableSchemaLines = _.uniq(\n entities.flatMap((entity) =>\n entity.props.filter(isManyToManyRelationProp).map((prop) => {\n const fromTableKey = inflection.singularize(entity.table);\n const toTableKey = inflection.singularize(\n EntityManager.get(prop.with).table\n );\n return `${prop.joinTable}: ManyToManyBaseSchema<\"${fromTableKey}\", \"${toTableKey}\">;`;\n })\n )\n );\n\n return {\n label: `DatabaseSchema`,\n lines: [\n `declare module \"sonamu\" {`,\n ` export interface DatabaseSchemaExtend {`,\n ...entitySchemaLines,\n ...joinTableSchemaLines,\n ` }`,\n `}`,\n ],\n importKeys: entities.map((entity) => `${entity.id}BaseSchema`),\n };\n }\n}\n"],"names":["Template__generated_sso","getTargetAndPath","dir","Sonamu","config","api","target","path","render","entityIds","EntityManager","getAllIds","entities","map","id","get","sourceCodes","entity","parentId","undefined","Object","keys","subsets","length","subsetKeys","subsetQueryObject","reduce","r","subsetKey","subsetQuery","getSubsetQuery","subsetKeyTypeName","names","module","label","lines","inflection","camelize","JSON","stringify","importKeys","filter","nonNullable","dbSchemaSourceCode","getDatabaseSchemaSourceCode","push","sourceCode","result","ts","_","uniq","body","join","isUsingManyToManyBaseSchema","includes","customHeaders","entitySchemaLines","table","joinTableSchemaLines","flatMap","props","isManyToManyRelationProp","prop","fromTableKey","singularize","toTableKey","with","joinTable","Template"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.template.d.ts","sourceRoot":"","sources":["../../src/templates/service.template.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAgB,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAQxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,qBAAa,iBAAkB,SAAQ,QAAQ;;IAK7C,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAOzC,MAAM,CAAC,EAAE,WAAW,EAAE,EAAE,eAAe,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE;;;;;;;IA2BvE,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG;QAClC,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB;IAyHD,WAAW,CACT,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM;IA4BpB,oBAAoB,CAClB,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,oBAAoB,EAAE,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"service.template.d.ts","sourceRoot":"","sources":["../../src/templates/service.template.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAgB,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAQxD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,qBAAa,iBAAkB,SAAQ,QAAQ;;IAK7C,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAOzC,MAAM,CAAC,EAAE,WAAW,EAAE,EAAE,eAAe,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE;;;;;;;IA2BvE,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG;QAClC,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB;IAyHD,WAAW,CACT,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM;IA4BpB,oBAAoB,CAClB,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,oBAAoB,EAAE,QAAQ,EAAE;IA4ClC,SAAS,CACP,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM;IAoBpB,iBAAiB,CACf,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM;IASpB,YAAY,CACV,GAAG,EAAE,WAAW,EAChB,UAAU,EAAE,MAAM,EAClB,iBAAiB,EAAE,MAAM;CAuB5B"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Template__service",{enumerable:true,get:function(){return Template__service}});var _inflection=/*#__PURE__*/_interop_require_default(require("inflection"));var _lodash=/*#__PURE__*/_interop_require_default(require("lodash"));var _types=require("../types/types");var _codeconverters=require("../api/code-converters");var _basetemplate=require("./base-template");var _sonamu=require("../api/sonamu");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 _assert_this_initialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}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(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 _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 ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly){symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})}keys.push.apply(keys,symbols)}return keys}function _object_spread_props(target,source){source=source!=null?source:{};if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source))}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))})}return target}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 _to_consumable_array(arr){return _array_without_holes(arr)||_iterable_to_array(arr)||_unsupported_iterable_to_array(arr)||_non_iterable_spread()}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})()}var Template__service=/*#__PURE__*/function(Template){"use strict";_inherits(Template__service,Template);function Template__service(){_class_call_check(this,Template__service);return _call_super(this,Template__service,["service"])}_create_class(Template__service,[{key:"getTargetAndPath",value:function getTargetAndPath(names){return{target:":target/src/services",path:"".concat(names.fs,"/").concat(names.fs,".service.ts")}}},{key:"render",value:function render(param,apis){var namesRecord=param.namesRecord;var _this_getTypeSource=this.getTypeSource(apis),lines=_this_getTypeSource.lines,importKeys=_this_getTypeSource.importKeys;var hasAxiosProgressEvent=apis.find(function(api){var _api_options_clients;return((_api_options_clients=api.options.clients)!==null&&_api_options_clients!==void 0?_api_options_clients:[]).includes("axios-multipart")});return _object_spread_props(_object_spread({},this.getTargetAndPath(namesRecord)),{body:lines.join("\n"),importKeys:importKeys.filter(function(key){return["ListResult"].includes(key)===false}),customHeaders:["import { z } from 'zod';",'import qs from "qs";','import useSWR, { SWRResponse } from "swr";',"import { fetch, ListResult, SWRError, SwrOptions, handleConditional, swrPostFetcher, EventHandlers, SSEStreamOptions, useSSEStream } from '../sonamu.shared';"].concat(_to_consumable_array(hasAxiosProgressEvent?["import { AxiosProgressEvent } from 'axios';"]:[]))})}},{key:"getTypeSource",value:function getTypeSource(apis){var _this=this;var importKeys=[];var typeParamNames=[];var groups=_lodash.default.groupBy(apis,function(api){return api.modelName});var body=Object.keys(groups).map(function(modelName){var methods=groups[modelName];var methodCodes=methods.map(function(api){var paramsWithoutContext=api.parameters.filter(function(param){return!_types.ApiParamType.isContext(param.type)&&!_types.ApiParamType.isRefKnex(param.type)&&!(param.optional===true&¶m.name.startsWith("_"))});var typeParamsDef=api.typeParameters.map(function(typeParam){return(0,_codeconverters.apiParamTypeToTsType)(typeParam,importKeys)}).join(", ");typeParamNames=typeParamNames.concat(api.typeParameters.map(function(typeParam){return typeParam.id}));var paramsDef=(0,_codeconverters.apiParamToTsCode)(paramsWithoutContext,importKeys);var paramsDefAsObject=(0,_codeconverters.apiParamToTsCodeAsObject)(paramsWithoutContext,importKeys);var returnTypeDef=(0,_codeconverters.apiParamTypeToTsType)((0,_codeconverters.unwrapPromiseOnce)(api.returnType),importKeys);var payloadDef="{ ".concat(paramsWithoutContext.map(function(param){return param.name}).join(", ")," }");var apiBaseUrl="".concat(_sonamu.Sonamu.config.route.prefix).concat(api.path);return _to_consumable_array(_lodash.default.sortBy(api.options.clients,function(client){return client==="swr"?0:1}).map(function(client){switch(client){case"axios":return _this.renderAxios(api,apiBaseUrl,typeParamsDef,paramsDef,returnTypeDef,payloadDef);case"axios-multipart":return _this.renderAxiosMultipart(api,apiBaseUrl,typeParamsDef,paramsDef,returnTypeDef,paramsWithoutContext);case"swr":return _this.renderSwr(api,apiBaseUrl,typeParamsDef,paramsDef,returnTypeDef,payloadDef);case"window-fetch":return _this.renderWindowFetch(api,apiBaseUrl,typeParamsDef,paramsDef,payloadDef);default:return"// Not supported ".concat(_inflection.default.camelize(client,true)," yet.")}})).concat(_to_consumable_array(api.streamOptions?[_this.renderStream(api,apiBaseUrl,paramsDefAsObject)]:[])).join("\n")}).join("\n\n");return"export namespace ".concat(modelName.replace(/Model$/,"Service").replace(/Frame$/,"Service")," {\n").concat(methodCodes,"\n}")}).join("\n\n");return{lines:[body],importKeys:_lodash.default.difference(_lodash.default.uniq(importKeys),typeParamNames)}}},{key:"renderAxios",value:function renderAxios(api,apiBaseUrl,typeParamsDef,paramsDef,returnTypeDef,payloadDef){var methodNameAxios=api.options.resourceName?"get"+_inflection.default.camelize(api.options.resourceName):api.methodName;if(api.options.httpMethod==="GET"){return"\nexport async function ".concat(methodNameAxios).concat(typeParamsDef,"(").concat(paramsDef,"): Promise<").concat(returnTypeDef,'> {\n return fetch({\n method: "GET",\n url: `').concat(apiBaseUrl,"?${qs.stringify(").concat(payloadDef,")}`,\n });\n}\n ").trim()}else{return"\nexport async function ".concat(methodNameAxios).concat(typeParamsDef,"(").concat(paramsDef,"): Promise<").concat(returnTypeDef,"> {\n return fetch({\n method: '").concat(api.options.httpMethod,"',\n url: `").concat(apiBaseUrl,"`,\n data: ").concat(payloadDef,",\n });\n}\n ").trim()}}},{key:"renderAxiosMultipart",value:function renderAxiosMultipart(api,apiBaseUrl,typeParamsDef,paramsDef,returnTypeDef,paramsWithoutContext){var formDataDef=['formData.append("file", file);'].concat(_to_consumable_array(paramsWithoutContext.map(function(param){return"formData.append('".concat(param.name,"', String(").concat(param.name,"));")}))).join("\n");var paramsDefComma=paramsDef!==""?", ":"";return"\nexport async function ".concat(api.methodName).concat(typeParamsDef,"(\n ").concat(paramsDef).concat(paramsDefComma,"\n file: File,\n onUploadProgress?: (pe:AxiosProgressEvent) => void\n ): Promise<").concat(returnTypeDef,"> {\n const formData = new FormData();\n ").concat(formDataDef,"\n return fetch({\n method: 'POST',\n url: `").concat(apiBaseUrl,'`,\n headers: {\n "Content-Type": "multipart/form-data",\n },\n onUploadProgress,\n data: formData,\n });\n }\n ').trim()}},{key:"renderSwr",value:function renderSwr(api,apiBaseUrl,typeParamsDef,paramsDef,returnTypeDef,payloadDef){var methodNameSwr=api.options.resourceName?"use"+_inflection.default.camelize(api.options.resourceName):"use"+_inflection.default.camelize(api.methodName);return" export function ".concat(_inflection.default.camelize(methodNameSwr,true)).concat(typeParamsDef,"(").concat([paramsDef,"swrOptions?: SwrOptions"].filter(function(p){return p!==""}).join(","),", ): SWRResponse<").concat(returnTypeDef,", SWRError> {\n return useSWR(handleConditional([\n `").concat(apiBaseUrl,"`,\n ").concat(payloadDef,",\n ], swrOptions?.conditional)").concat(api.options.httpMethod==="POST"?", swrPostFetcher":"",");\n }")}},{key:"renderWindowFetch",value:function renderWindowFetch(api,apiBaseUrl,typeParamsDef,paramsDef,payloadDef){return"\nexport async function ".concat(api.methodName).concat(typeParamsDef,"(").concat(paramsDef,"): Promise<Response> {\n return window.fetch(`").concat(apiBaseUrl,"?${qs.stringify(").concat(payloadDef,")}`);\n}\n ").trim()}},{key:"renderStream",value:function renderStream(api,apiBaseUrl,paramsDefAsObject){if(!api.streamOptions){return"// streamOptions not found"}var methodNameStream=api.options.resourceName?"use"+_inflection.default.camelize(api.options.resourceName):"use"+_inflection.default.camelize(api.methodName);var methodNameStreamCamelized=_inflection.default.camelize(methodNameStream,true);var eventsTypeDef=(0,_codeconverters.zodTypeToTsTypeDef)(api.streamOptions.events);return" export function ".concat(methodNameStreamCamelized,"(\n params: ").concat(paramsDefAsObject,",\n handlers: EventHandlers<").concat(eventsTypeDef," & { end?: () => void }>,\n options: SSEStreamOptions) {\n return useSSEStream<").concat(eventsTypeDef,">(`").concat(apiBaseUrl,"`, params, handlers, options);\n }")}}]);return Template__service}(_basetemplate.Template);
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"Template__service",{enumerable:true,get:function(){return Template__service}});var _inflection=/*#__PURE__*/_interop_require_default(require("inflection"));var _lodash=/*#__PURE__*/_interop_require_default(require("lodash"));var _types=require("../types/types");var _codeconverters=require("../api/code-converters");var _basetemplate=require("./base-template");var _sonamu=require("../api/sonamu");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 _assert_this_initialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called")}return self}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(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 _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 ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly){symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})}keys.push.apply(keys,symbols)}return keys}function _object_spread_props(target,source){source=source!=null?source:{};if(Object.getOwnPropertyDescriptors){Object.defineProperties(target,Object.getOwnPropertyDescriptors(source))}else{ownKeys(Object(source)).forEach(function(key){Object.defineProperty(target,key,Object.getOwnPropertyDescriptor(source,key))})}return target}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 _to_consumable_array(arr){return _array_without_holes(arr)||_iterable_to_array(arr)||_unsupported_iterable_to_array(arr)||_non_iterable_spread()}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})()}var Template__service=/*#__PURE__*/function(Template){"use strict";_inherits(Template__service,Template);function Template__service(){_class_call_check(this,Template__service);return _call_super(this,Template__service,["service"])}_create_class(Template__service,[{key:"getTargetAndPath",value:function getTargetAndPath(names){return{target:":target/src/services",path:"".concat(names.fs,"/").concat(names.fs,".service.ts")}}},{key:"render",value:function render(param,apis){var namesRecord=param.namesRecord;var _this_getTypeSource=this.getTypeSource(apis),lines=_this_getTypeSource.lines,importKeys=_this_getTypeSource.importKeys;var hasAxiosProgressEvent=apis.find(function(api){var _api_options_clients;return((_api_options_clients=api.options.clients)!==null&&_api_options_clients!==void 0?_api_options_clients:[]).includes("axios-multipart")});return _object_spread_props(_object_spread({},this.getTargetAndPath(namesRecord)),{body:lines.join("\n"),importKeys:importKeys.filter(function(key){return["ListResult"].includes(key)===false}),customHeaders:["import { z } from 'zod';",'import qs from "qs";','import useSWR, { SWRResponse } from "swr";',"import { fetch, ListResult, SWRError, SwrOptions, handleConditional, swrPostFetcher, EventHandlers, SSEStreamOptions, useSSEStream } from '../sonamu.shared';"].concat(_to_consumable_array(hasAxiosProgressEvent?["import { AxiosProgressEvent } from 'axios';"]:[]))})}},{key:"getTypeSource",value:function getTypeSource(apis){var _this=this;var importKeys=[];var typeParamNames=[];var groups=_lodash.default.groupBy(apis,function(api){return api.modelName});var body=Object.keys(groups).map(function(modelName){var methods=groups[modelName];var methodCodes=methods.map(function(api){var paramsWithoutContext=api.parameters.filter(function(param){return!_types.ApiParamType.isContext(param.type)&&!_types.ApiParamType.isRefKnex(param.type)&&!(param.optional===true&¶m.name.startsWith("_"))});var typeParamsDef=api.typeParameters.map(function(typeParam){return(0,_codeconverters.apiParamTypeToTsType)(typeParam,importKeys)}).join(", ");typeParamNames=typeParamNames.concat(api.typeParameters.map(function(typeParam){return typeParam.id}));var paramsDef=(0,_codeconverters.apiParamToTsCode)(paramsWithoutContext,importKeys);var paramsDefAsObject=(0,_codeconverters.apiParamToTsCodeAsObject)(paramsWithoutContext,importKeys);var returnTypeDef=(0,_codeconverters.apiParamTypeToTsType)((0,_codeconverters.unwrapPromiseOnce)(api.returnType),importKeys);var payloadDef="{ ".concat(paramsWithoutContext.map(function(param){return param.name}).join(", ")," }");var apiBaseUrl="".concat(_sonamu.Sonamu.config.route.prefix).concat(api.path);return _to_consumable_array(_lodash.default.sortBy(api.options.clients,function(client){return client==="swr"?0:1}).map(function(client){switch(client){case"axios":return _this.renderAxios(api,apiBaseUrl,typeParamsDef,paramsDef,returnTypeDef,payloadDef);case"axios-multipart":return _this.renderAxiosMultipart(api,apiBaseUrl,typeParamsDef,paramsDef,returnTypeDef,paramsWithoutContext);case"swr":return _this.renderSwr(api,apiBaseUrl,typeParamsDef,paramsDef,returnTypeDef,payloadDef);case"window-fetch":return _this.renderWindowFetch(api,apiBaseUrl,typeParamsDef,paramsDef,payloadDef);default:return"// Not supported ".concat(_inflection.default.camelize(client,true)," yet.")}})).concat(_to_consumable_array(api.streamOptions?[_this.renderStream(api,apiBaseUrl,paramsDefAsObject)]:[])).join("\n")}).join("\n\n");return"export namespace ".concat(modelName.replace(/Model$/,"Service").replace(/Frame$/,"Service")," {\n").concat(methodCodes,"\n}")}).join("\n\n");return{lines:[body],importKeys:_lodash.default.difference(_lodash.default.uniq(importKeys),typeParamNames)}}},{key:"renderAxios",value:function renderAxios(api,apiBaseUrl,typeParamsDef,paramsDef,returnTypeDef,payloadDef){var methodNameAxios=api.options.resourceName?"get"+_inflection.default.camelize(api.options.resourceName):api.methodName;if(api.options.httpMethod==="GET"){return"\nexport async function ".concat(methodNameAxios).concat(typeParamsDef,"(").concat(paramsDef,"): Promise<").concat(returnTypeDef,'> {\n return fetch({\n method: "GET",\n url: `').concat(apiBaseUrl,"?${qs.stringify(").concat(payloadDef,")}`,\n });\n}\n ").trim()}else{return"\nexport async function ".concat(methodNameAxios).concat(typeParamsDef,"(").concat(paramsDef,"): Promise<").concat(returnTypeDef,"> {\n return fetch({\n method: '").concat(api.options.httpMethod,"',\n url: `").concat(apiBaseUrl,"`,\n data: ").concat(payloadDef,",\n });\n}\n ").trim()}}},{key:"renderAxiosMultipart",value:function renderAxiosMultipart(api,apiBaseUrl,typeParamsDef,paramsDef,returnTypeDef,paramsWithoutContext){var _api_uploadOptions;var isMultiple=((_api_uploadOptions=api.uploadOptions)===null||_api_uploadOptions===void 0?void 0:_api_uploadOptions.mode)==="multiple";var fileParamName=isMultiple?"files":"file";var fileParamType=isMultiple?"File[]":"File";var formDataDef=isMultiple?["".concat(fileParamName,'.forEach(f => formData.append("').concat(fileParamName,'", f));')].concat(_to_consumable_array(paramsWithoutContext.map(function(param){return"formData.append('".concat(param.name,"', String(").concat(param.name,"));")}))).join("\n"):['formData.append("'.concat(fileParamName,'", ').concat(fileParamName,");")].concat(_to_consumable_array(paramsWithoutContext.map(function(param){return"formData.append('".concat(param.name,"', String(").concat(param.name,"));")}))).join("\n");var paramsDefComma=paramsDef!==""?", ":"";return"\nexport async function ".concat(api.methodName).concat(typeParamsDef,"(\n ").concat(paramsDef).concat(paramsDefComma,"\n ").concat(fileParamName,": ").concat(fileParamType,",\n onUploadProgress?: (pe:AxiosProgressEvent) => void\n ): Promise<").concat(returnTypeDef,"> {\n const formData = new FormData();\n ").concat(formDataDef,"\n return fetch({\n method: 'POST',\n url: `").concat(apiBaseUrl,'`,\n headers: {\n "Content-Type": "multipart/form-data",\n },\n onUploadProgress,\n data: formData,\n });\n }\n ').trim()}},{key:"renderSwr",value:function renderSwr(api,apiBaseUrl,typeParamsDef,paramsDef,returnTypeDef,payloadDef){var methodNameSwr=api.options.resourceName?"use"+_inflection.default.camelize(api.options.resourceName):"use"+_inflection.default.camelize(api.methodName);return" export function ".concat(_inflection.default.camelize(methodNameSwr,true)).concat(typeParamsDef,"(").concat([paramsDef,"swrOptions?: SwrOptions"].filter(function(p){return p!==""}).join(","),", ): SWRResponse<").concat(returnTypeDef,", SWRError> {\n return useSWR(handleConditional([\n `").concat(apiBaseUrl,"`,\n ").concat(payloadDef,",\n ], swrOptions?.conditional)").concat(api.options.httpMethod==="POST"?", swrPostFetcher":"",");\n }")}},{key:"renderWindowFetch",value:function renderWindowFetch(api,apiBaseUrl,typeParamsDef,paramsDef,payloadDef){return"\nexport async function ".concat(api.methodName).concat(typeParamsDef,"(").concat(paramsDef,"): Promise<Response> {\n return window.fetch(`").concat(apiBaseUrl,"?${qs.stringify(").concat(payloadDef,")}`);\n}\n ").trim()}},{key:"renderStream",value:function renderStream(api,apiBaseUrl,paramsDefAsObject){if(!api.streamOptions){return"// streamOptions not found"}var methodNameStream=api.options.resourceName?"use"+_inflection.default.camelize(api.options.resourceName):"use"+_inflection.default.camelize(api.methodName);var methodNameStreamCamelized=_inflection.default.camelize(methodNameStream,true);var eventsTypeDef=(0,_codeconverters.zodTypeToTsTypeDef)(api.streamOptions.events);return" export function ".concat(methodNameStreamCamelized,"(\n params: ").concat(paramsDefAsObject,",\n handlers: EventHandlers<").concat(eventsTypeDef," & { end?: () => void }>,\n options: SSEStreamOptions) {\n return useSSEStream<").concat(eventsTypeDef,">(`").concat(apiBaseUrl,"`, params, handlers, options);\n }")}}]);return Template__service}(_basetemplate.Template);
|
|
2
2
|
//# sourceMappingURL=service.template.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/templates/service.template.ts"],"sourcesContent":["import inflection from \"inflection\";\nimport _ from \"lodash\";\nimport { TemplateOptions } from \"../types/types\";\nimport { EntityNamesRecord } from \"../entity/entity-manager\";\nimport { ApiParamType, ApiParam } from \"../types/types\";\nimport {\n apiParamTypeToTsType,\n apiParamToTsCode,\n unwrapPromiseOnce,\n zodTypeToTsTypeDef,\n apiParamToTsCodeAsObject,\n} from \"../api/code-converters\";\nimport { ExtendedApi } from \"../api/decorators\";\nimport { Template } from \"./base-template\";\nimport { Sonamu } from \"../api/sonamu\";\n\nexport class Template__service extends Template {\n constructor() {\n super(\"service\");\n }\n\n getTargetAndPath(names: EntityNamesRecord) {\n return {\n target: \":target/src/services\",\n path: `${names.fs}/${names.fs}.service.ts`,\n };\n }\n\n render({ namesRecord }: TemplateOptions[\"service\"], apis: ExtendedApi[]) {\n // 서비스 TypeSource\n const { lines, importKeys } = this.getTypeSource(apis);\n\n // AxiosProgressEvent 있는지 확인\n const hasAxiosProgressEvent = apis.find((api) =>\n (api.options.clients ?? []).includes(\"axios-multipart\")\n );\n\n return {\n ...this.getTargetAndPath(namesRecord),\n body: lines.join(\"\\n\"),\n importKeys: importKeys.filter(\n (key) => [\"ListResult\"].includes(key) === false\n ),\n customHeaders: [\n `import { z } from 'zod';`,\n `import qs from \"qs\";`,\n `import useSWR, { SWRResponse } from \"swr\";`,\n `import { fetch, ListResult, SWRError, SwrOptions, handleConditional, swrPostFetcher, EventHandlers, SSEStreamOptions, useSSEStream } from '../sonamu.shared';`,\n ...(hasAxiosProgressEvent\n ? [`import { AxiosProgressEvent } from 'axios';`]\n : []),\n ],\n };\n }\n\n getTypeSource(apis: ExtendedApi[]): {\n lines: string[];\n importKeys: string[];\n } {\n const importKeys: string[] = [];\n\n // 제네릭에서 선언한 타입, importKeys에서 제외 필요\n let typeParamNames: string[] = [];\n\n const groups = _.groupBy(apis, (api) => api.modelName);\n const body = Object.keys(groups)\n .map((modelName) => {\n const methods = groups[modelName];\n const methodCodes = methods\n .map((api) => {\n // 컨텍스트 제외된 파라미터 리스트\n const paramsWithoutContext = api.parameters.filter(\n (param) =>\n !ApiParamType.isContext(param.type) &&\n !ApiParamType.isRefKnex(param.type) &&\n !(param.optional === true && param.name.startsWith(\"_\")) // _로 시작하는 파라미터는 제외\n );\n\n // 파라미터 타입 정의\n const typeParamsDef = api.typeParameters\n .map((typeParam) => {\n return apiParamTypeToTsType(typeParam, importKeys);\n })\n .join(\", \");\n typeParamNames = typeParamNames.concat(\n api.typeParameters.map((typeParam) => typeParam.id)\n );\n\n // 파라미터 정의\n const paramsDef = apiParamToTsCode(\n paramsWithoutContext,\n importKeys\n );\n\n // 파라미터 정의 (객체 형태)\n const paramsDefAsObject = apiParamToTsCodeAsObject(\n paramsWithoutContext,\n importKeys\n );\n\n // 리턴 타입 정의\n const returnTypeDef = apiParamTypeToTsType(\n unwrapPromiseOnce(api.returnType),\n importKeys\n );\n\n // 페이로드 데이터 정의\n const payloadDef = `{ ${paramsWithoutContext\n .map((param) => param.name)\n .join(\", \")} }`;\n\n // 기본 URL\n const apiBaseUrl = `${Sonamu.config.route.prefix}${api.path}`;\n\n return [\n // 클라이언트별로 생성\n ..._.sortBy(api.options.clients, (client) =>\n client === \"swr\" ? 0 : 1\n ).map((client) => {\n switch (client) {\n case \"axios\":\n return this.renderAxios(\n api,\n apiBaseUrl,\n typeParamsDef,\n paramsDef,\n returnTypeDef,\n payloadDef\n );\n case \"axios-multipart\":\n return this.renderAxiosMultipart(\n api,\n apiBaseUrl,\n typeParamsDef,\n paramsDef,\n returnTypeDef,\n paramsWithoutContext\n );\n case \"swr\":\n return this.renderSwr(\n api,\n apiBaseUrl,\n typeParamsDef,\n paramsDef,\n returnTypeDef,\n payloadDef\n );\n case \"window-fetch\":\n return this.renderWindowFetch(\n api,\n apiBaseUrl,\n typeParamsDef,\n paramsDef,\n payloadDef\n );\n default:\n return `// Not supported ${inflection.camelize(client, true)} yet.`;\n }\n }),\n // 스트리밍인 경우\n ...(api.streamOptions\n ? [this.renderStream(api, apiBaseUrl, paramsDefAsObject)]\n : []),\n ].join(\"\\n\");\n })\n .join(\"\\n\\n\");\n\n return `export namespace ${modelName.replace(/Model$/, \"Service\").replace(/Frame$/, \"Service\")} {\n${methodCodes}\n}`;\n })\n .join(\"\\n\\n\");\n\n return {\n lines: [body],\n importKeys: _.difference(_.uniq(importKeys), typeParamNames),\n };\n }\n\n renderAxios(\n api: ExtendedApi,\n apiBaseUrl: string,\n typeParamsDef: string,\n paramsDef: string,\n returnTypeDef: string,\n payloadDef: string\n ) {\n const methodNameAxios = api.options.resourceName\n ? \"get\" + inflection.camelize(api.options.resourceName)\n : api.methodName;\n\n if (api.options.httpMethod === \"GET\") {\n return `\nexport async function ${methodNameAxios}${typeParamsDef}(${paramsDef}): Promise<${returnTypeDef}> {\n return fetch({\n method: \"GET\",\n url: \\`${apiBaseUrl}?\\${qs.stringify(${payloadDef})}\\`,\n });\n}\n `.trim();\n } else {\n return `\nexport async function ${methodNameAxios}${typeParamsDef}(${paramsDef}): Promise<${returnTypeDef}> {\n return fetch({\n method: '${api.options.httpMethod}',\n url: \\`${apiBaseUrl}\\`,\n data: ${payloadDef},\n });\n}\n `.trim();\n }\n }\n\n renderAxiosMultipart(\n api: ExtendedApi,\n apiBaseUrl: string,\n typeParamsDef: string,\n paramsDef: string,\n returnTypeDef: string,\n paramsWithoutContext: ApiParam[]\n ) {\n const formDataDef = [\n 'formData.append(\"file\", file);',\n ...paramsWithoutContext.map(\n (param) => `formData.append('${param.name}', String(${param.name}));`\n ),\n ].join(\"\\n\");\n\n const paramsDefComma = paramsDef !== \"\" ? \", \" : \"\";\n return `\nexport async function ${api.methodName}${typeParamsDef}(\n ${paramsDef}${paramsDefComma}\n file: File,\n onUploadProgress?: (pe:AxiosProgressEvent) => void\n ): Promise<${returnTypeDef}> {\n const formData = new FormData();\n ${formDataDef}\n return fetch({\n method: 'POST',\n url: \\`${apiBaseUrl}\\`,\n headers: {\n \"Content-Type\": \"multipart/form-data\",\n },\n onUploadProgress,\n data: formData,\n });\n }\n `.trim();\n }\n\n renderSwr(\n api: ExtendedApi,\n apiBaseUrl: string,\n typeParamsDef: string,\n paramsDef: string,\n returnTypeDef: string,\n payloadDef: string\n ) {\n const methodNameSwr = api.options.resourceName\n ? \"use\" + inflection.camelize(api.options.resourceName)\n : \"use\" + inflection.camelize(api.methodName);\n return ` export function ${inflection.camelize(\n methodNameSwr,\n true\n )}${typeParamsDef}(${[paramsDef, \"swrOptions?: SwrOptions\"]\n .filter((p) => p !== \"\")\n .join(\",\")}, ): SWRResponse<${returnTypeDef}, SWRError> {\n return useSWR(handleConditional([\n \\`${apiBaseUrl}\\`,\n ${payloadDef},\n ], swrOptions?.conditional)${\n api.options.httpMethod === \"POST\" ? \", swrPostFetcher\" : \"\"\n });\n }`;\n }\n\n renderWindowFetch(\n api: ExtendedApi,\n apiBaseUrl: string,\n typeParamsDef: string,\n paramsDef: string,\n payloadDef: string\n ) {\n return `\nexport async function ${api.methodName}${typeParamsDef}(${paramsDef}): Promise<Response> {\n return window.fetch(\\`${apiBaseUrl}?\\${qs.stringify(${payloadDef})}\\`);\n}\n `.trim();\n }\n\n renderStream(\n api: ExtendedApi,\n apiBaseUrl: string,\n paramsDefAsObject: string\n ) {\n if (!api.streamOptions) {\n return \"// streamOptions not found\";\n }\n\n const methodNameStream = api.options.resourceName\n ? \"use\" + inflection.camelize(api.options.resourceName)\n : \"use\" + inflection.camelize(api.methodName);\n const methodNameStreamCamelized = inflection.camelize(\n methodNameStream,\n true\n );\n\n const eventsTypeDef = zodTypeToTsTypeDef(api.streamOptions.events);\n\n return ` export function ${methodNameStreamCamelized}(\n params: ${paramsDefAsObject},\n handlers: EventHandlers<${eventsTypeDef} & { end?: () => void }>,\n options: SSEStreamOptions) {\n return useSSEStream<${eventsTypeDef}>(\\`${apiBaseUrl}\\`, params, handlers, options);\n }`;\n }\n}\n"],"names":["Template__service","getTargetAndPath","names","target","path","fs","render","apis","namesRecord","getTypeSource","lines","importKeys","hasAxiosProgressEvent","find","api","options","clients","includes","body","join","filter","key","customHeaders","typeParamNames","groups","_","groupBy","modelName","Object","keys","map","methods","methodCodes","paramsWithoutContext","parameters","param","ApiParamType","isContext","type","isRefKnex","optional","name","startsWith","typeParamsDef","typeParameters","typeParam","apiParamTypeToTsType","concat","id","paramsDef","apiParamToTsCode","paramsDefAsObject","apiParamToTsCodeAsObject","returnTypeDef","unwrapPromiseOnce","returnType","payloadDef","apiBaseUrl","Sonamu","config","route","prefix","sortBy","client","renderAxios","renderAxiosMultipart","renderSwr","renderWindowFetch","inflection","camelize","streamOptions","renderStream","replace","difference","uniq","methodNameAxios","resourceName","methodName","httpMethod","trim","formDataDef","paramsDefComma","methodNameSwr","p","methodNameStream","methodNameStreamCamelized","eventsTypeDef","zodTypeToTsTypeDef","events","Template"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/templates/service.template.ts"],"sourcesContent":["import inflection from \"inflection\";\nimport _ from \"lodash\";\nimport { TemplateOptions } from \"../types/types\";\nimport { EntityNamesRecord } from \"../entity/entity-manager\";\nimport { ApiParamType, ApiParam } from \"../types/types\";\nimport {\n apiParamTypeToTsType,\n apiParamToTsCode,\n unwrapPromiseOnce,\n zodTypeToTsTypeDef,\n apiParamToTsCodeAsObject,\n} from \"../api/code-converters\";\nimport { ExtendedApi } from \"../api/decorators\";\nimport { Template } from \"./base-template\";\nimport { Sonamu } from \"../api/sonamu\";\n\nexport class Template__service extends Template {\n constructor() {\n super(\"service\");\n }\n\n getTargetAndPath(names: EntityNamesRecord) {\n return {\n target: \":target/src/services\",\n path: `${names.fs}/${names.fs}.service.ts`,\n };\n }\n\n render({ namesRecord }: TemplateOptions[\"service\"], apis: ExtendedApi[]) {\n // 서비스 TypeSource\n const { lines, importKeys } = this.getTypeSource(apis);\n\n // AxiosProgressEvent 있는지 확인\n const hasAxiosProgressEvent = apis.find((api) =>\n (api.options.clients ?? []).includes(\"axios-multipart\")\n );\n\n return {\n ...this.getTargetAndPath(namesRecord),\n body: lines.join(\"\\n\"),\n importKeys: importKeys.filter(\n (key) => [\"ListResult\"].includes(key) === false\n ),\n customHeaders: [\n `import { z } from 'zod';`,\n `import qs from \"qs\";`,\n `import useSWR, { SWRResponse } from \"swr\";`,\n `import { fetch, ListResult, SWRError, SwrOptions, handleConditional, swrPostFetcher, EventHandlers, SSEStreamOptions, useSSEStream } from '../sonamu.shared';`,\n ...(hasAxiosProgressEvent\n ? [`import { AxiosProgressEvent } from 'axios';`]\n : []),\n ],\n };\n }\n\n getTypeSource(apis: ExtendedApi[]): {\n lines: string[];\n importKeys: string[];\n } {\n const importKeys: string[] = [];\n\n // 제네릭에서 선언한 타입, importKeys에서 제외 필요\n let typeParamNames: string[] = [];\n\n const groups = _.groupBy(apis, (api) => api.modelName);\n const body = Object.keys(groups)\n .map((modelName) => {\n const methods = groups[modelName];\n const methodCodes = methods\n .map((api) => {\n // 컨텍스트 제외된 파라미터 리스트\n const paramsWithoutContext = api.parameters.filter(\n (param) =>\n !ApiParamType.isContext(param.type) &&\n !ApiParamType.isRefKnex(param.type) &&\n !(param.optional === true && param.name.startsWith(\"_\")) // _로 시작하는 파라미터는 제외\n );\n\n // 파라미터 타입 정의\n const typeParamsDef = api.typeParameters\n .map((typeParam) => {\n return apiParamTypeToTsType(typeParam, importKeys);\n })\n .join(\", \");\n typeParamNames = typeParamNames.concat(\n api.typeParameters.map((typeParam) => typeParam.id)\n );\n\n // 파라미터 정의\n const paramsDef = apiParamToTsCode(\n paramsWithoutContext,\n importKeys\n );\n\n // 파라미터 정의 (객체 형태)\n const paramsDefAsObject = apiParamToTsCodeAsObject(\n paramsWithoutContext,\n importKeys\n );\n\n // 리턴 타입 정의\n const returnTypeDef = apiParamTypeToTsType(\n unwrapPromiseOnce(api.returnType),\n importKeys\n );\n\n // 페이로드 데이터 정의\n const payloadDef = `{ ${paramsWithoutContext\n .map((param) => param.name)\n .join(\", \")} }`;\n\n // 기본 URL\n const apiBaseUrl = `${Sonamu.config.route.prefix}${api.path}`;\n\n return [\n // 클라이언트별로 생성\n ..._.sortBy(api.options.clients, (client) =>\n client === \"swr\" ? 0 : 1\n ).map((client) => {\n switch (client) {\n case \"axios\":\n return this.renderAxios(\n api,\n apiBaseUrl,\n typeParamsDef,\n paramsDef,\n returnTypeDef,\n payloadDef\n );\n case \"axios-multipart\":\n return this.renderAxiosMultipart(\n api,\n apiBaseUrl,\n typeParamsDef,\n paramsDef,\n returnTypeDef,\n paramsWithoutContext\n );\n case \"swr\":\n return this.renderSwr(\n api,\n apiBaseUrl,\n typeParamsDef,\n paramsDef,\n returnTypeDef,\n payloadDef\n );\n case \"window-fetch\":\n return this.renderWindowFetch(\n api,\n apiBaseUrl,\n typeParamsDef,\n paramsDef,\n payloadDef\n );\n default:\n return `// Not supported ${inflection.camelize(client, true)} yet.`;\n }\n }),\n // 스트리밍인 경우\n ...(api.streamOptions\n ? [this.renderStream(api, apiBaseUrl, paramsDefAsObject)]\n : []),\n ].join(\"\\n\");\n })\n .join(\"\\n\\n\");\n\n return `export namespace ${modelName.replace(/Model$/, \"Service\").replace(/Frame$/, \"Service\")} {\n${methodCodes}\n}`;\n })\n .join(\"\\n\\n\");\n\n return {\n lines: [body],\n importKeys: _.difference(_.uniq(importKeys), typeParamNames),\n };\n }\n\n renderAxios(\n api: ExtendedApi,\n apiBaseUrl: string,\n typeParamsDef: string,\n paramsDef: string,\n returnTypeDef: string,\n payloadDef: string\n ) {\n const methodNameAxios = api.options.resourceName\n ? \"get\" + inflection.camelize(api.options.resourceName)\n : api.methodName;\n\n if (api.options.httpMethod === \"GET\") {\n return `\nexport async function ${methodNameAxios}${typeParamsDef}(${paramsDef}): Promise<${returnTypeDef}> {\n return fetch({\n method: \"GET\",\n url: \\`${apiBaseUrl}?\\${qs.stringify(${payloadDef})}\\`,\n });\n}\n `.trim();\n } else {\n return `\nexport async function ${methodNameAxios}${typeParamsDef}(${paramsDef}): Promise<${returnTypeDef}> {\n return fetch({\n method: '${api.options.httpMethod}',\n url: \\`${apiBaseUrl}\\`,\n data: ${payloadDef},\n });\n}\n `.trim();\n }\n }\n\n renderAxiosMultipart(\n api: ExtendedApi,\n apiBaseUrl: string,\n typeParamsDef: string,\n paramsDef: string,\n returnTypeDef: string,\n paramsWithoutContext: ApiParam[]\n ) {\n const isMultiple = api.uploadOptions?.mode === \"multiple\";\n const fileParamName = isMultiple ? \"files\" : \"file\";\n const fileParamType = isMultiple ? \"File[]\" : \"File\";\n\n const formDataDef = isMultiple\n ? [\n `${fileParamName}.forEach(f => formData.append(\"${fileParamName}\", f));`,\n ...paramsWithoutContext.map(\n (param) =>\n `formData.append('${param.name}', String(${param.name}));`\n ),\n ].join(\"\\n\")\n : [\n `formData.append(\"${fileParamName}\", ${fileParamName});`,\n ...paramsWithoutContext.map(\n (param) =>\n `formData.append('${param.name}', String(${param.name}));`\n ),\n ].join(\"\\n\");\n\n const paramsDefComma = paramsDef !== \"\" ? \", \" : \"\";\n return `\nexport async function ${api.methodName}${typeParamsDef}(\n ${paramsDef}${paramsDefComma}\n ${fileParamName}: ${fileParamType},\n onUploadProgress?: (pe:AxiosProgressEvent) => void\n ): Promise<${returnTypeDef}> {\n const formData = new FormData();\n ${formDataDef}\n return fetch({\n method: 'POST',\n url: \\`${apiBaseUrl}\\`,\n headers: {\n \"Content-Type\": \"multipart/form-data\",\n },\n onUploadProgress,\n data: formData,\n });\n }\n `.trim();\n }\n\n renderSwr(\n api: ExtendedApi,\n apiBaseUrl: string,\n typeParamsDef: string,\n paramsDef: string,\n returnTypeDef: string,\n payloadDef: string\n ) {\n const methodNameSwr = api.options.resourceName\n ? \"use\" + inflection.camelize(api.options.resourceName)\n : \"use\" + inflection.camelize(api.methodName);\n return ` export function ${inflection.camelize(\n methodNameSwr,\n true\n )}${typeParamsDef}(${[paramsDef, \"swrOptions?: SwrOptions\"]\n .filter((p) => p !== \"\")\n .join(\",\")}, ): SWRResponse<${returnTypeDef}, SWRError> {\n return useSWR(handleConditional([\n \\`${apiBaseUrl}\\`,\n ${payloadDef},\n ], swrOptions?.conditional)${\n api.options.httpMethod === \"POST\" ? \", swrPostFetcher\" : \"\"\n });\n }`;\n }\n\n renderWindowFetch(\n api: ExtendedApi,\n apiBaseUrl: string,\n typeParamsDef: string,\n paramsDef: string,\n payloadDef: string\n ) {\n return `\nexport async function ${api.methodName}${typeParamsDef}(${paramsDef}): Promise<Response> {\n return window.fetch(\\`${apiBaseUrl}?\\${qs.stringify(${payloadDef})}\\`);\n}\n `.trim();\n }\n\n renderStream(\n api: ExtendedApi,\n apiBaseUrl: string,\n paramsDefAsObject: string\n ) {\n if (!api.streamOptions) {\n return \"// streamOptions not found\";\n }\n\n const methodNameStream = api.options.resourceName\n ? \"use\" + inflection.camelize(api.options.resourceName)\n : \"use\" + inflection.camelize(api.methodName);\n const methodNameStreamCamelized = inflection.camelize(\n methodNameStream,\n true\n );\n\n const eventsTypeDef = zodTypeToTsTypeDef(api.streamOptions.events);\n\n return ` export function ${methodNameStreamCamelized}(\n params: ${paramsDefAsObject},\n handlers: EventHandlers<${eventsTypeDef} & { end?: () => void }>,\n options: SSEStreamOptions) {\n return useSSEStream<${eventsTypeDef}>(\\`${apiBaseUrl}\\`, params, handlers, options);\n }`;\n }\n}\n"],"names":["Template__service","getTargetAndPath","names","target","path","fs","render","apis","namesRecord","getTypeSource","lines","importKeys","hasAxiosProgressEvent","find","api","options","clients","includes","body","join","filter","key","customHeaders","typeParamNames","groups","_","groupBy","modelName","Object","keys","map","methods","methodCodes","paramsWithoutContext","parameters","param","ApiParamType","isContext","type","isRefKnex","optional","name","startsWith","typeParamsDef","typeParameters","typeParam","apiParamTypeToTsType","concat","id","paramsDef","apiParamToTsCode","paramsDefAsObject","apiParamToTsCodeAsObject","returnTypeDef","unwrapPromiseOnce","returnType","payloadDef","apiBaseUrl","Sonamu","config","route","prefix","sortBy","client","renderAxios","renderAxiosMultipart","renderSwr","renderWindowFetch","inflection","camelize","streamOptions","renderStream","replace","difference","uniq","methodNameAxios","resourceName","methodName","httpMethod","trim","isMultiple","uploadOptions","mode","fileParamName","fileParamType","formDataDef","paramsDefComma","methodNameSwr","p","methodNameStream","methodNameStreamCamelized","eventsTypeDef","zodTypeToTsTypeDef","events","Template"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fixture-manager.d.ts","sourceRoot":"","sources":["../../src/testing/fixture-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EAQrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI1C,OAAa,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAElC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,IAAI,CAAqB;IACjC,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,EAEhB;IACD,IAAI,GAAG,IAAI,IAAI,CAKd;IAED,OAAO,CAAC,IAAI,CAAqB;IACjC,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,EAEhB;IACD,IAAI,GAAG,IAAI,IAAI,CAKd;IACD,gBAAgB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAQ;IAEzC,OAAO,CAAC,aAAa,CAAuB;IAE5C,IAAI;IA0BE,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE;IAmEnC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM;IAKvC,IAAI;IAgEV,OAAO,CAAC,cAAc,CAAqB;IACrC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;IAwB7C,gBAAgB,CACpB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,MAAM,EAAE,CAAC;IA8Ed,OAAO;IAYP,WAAW,CACf,YAAY,EAAE,MAAM,cAAc,EAClC,YAAY,EAAE,MAAM,cAAc,EAClC,aAAa,EAAE,oBAAoB;IA0E/B,mBAAmB,CACvB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,EACR,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,GAAG,CAAC,EAAE,IAAI,CAAC;KACZ,GACA,OAAO,CAAC,aAAa,EAAE,CAAC;IAoFrB,cAAc,CAClB,MAAM,EAAE,MAAM,cAAc,EAC5B,SAAS,EAAE,aAAa,EAAE;IAyD5B,OAAO,CAAC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"fixture-manager.d.ts","sourceRoot":"","sources":["../../src/testing/fixture-manager.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,mBAAmB,EACnB,aAAa,EACb,oBAAoB,EAQrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAI1C,OAAa,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAElC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,IAAI,CAAqB;IACjC,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,EAEhB;IACD,IAAI,GAAG,IAAI,IAAI,CAKd;IAED,OAAO,CAAC,IAAI,CAAqB;IACjC,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,EAEhB;IACD,IAAI,GAAG,IAAI,IAAI,CAKd;IACD,gBAAgB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAQ;IAEzC,OAAO,CAAC,aAAa,CAAuB;IAE5C,IAAI;IA0BE,YAAY,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE;IAmEnC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM;IAKvC,IAAI;IAgEV,OAAO,CAAC,cAAc,CAAqB;IACrC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;IAwB7C,gBAAgB,CACpB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,GACT,OAAO,CAAC,MAAM,EAAE,CAAC;IA8Ed,OAAO;IAYP,WAAW,CACf,YAAY,EAAE,MAAM,cAAc,EAClC,YAAY,EAAE,MAAM,cAAc,EAClC,aAAa,EAAE,oBAAoB;IA0E/B,mBAAmB,CACvB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,GAAG,EACR,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,GAAG,CAAC,EAAE,IAAI,CAAC;KACZ,GACA,OAAO,CAAC,aAAa,EAAE,CAAC;IAoFrB,cAAc,CAClB,MAAM,EAAE,MAAM,cAAc,EAC5B,SAAS,EAAE,aAAa,EAAE;IAyD5B,OAAO,CAAC,iBAAiB;YA0BX,aAAa;YAiCb,yBAAyB;IAkDjC,gBAAgB,CAAC,IAAI,EAAE,MAAM;YAsBrB,oBAAoB;CAyCnC;AACD,eAAO,MAAM,cAAc,qBAA4B,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
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 FixtureManager(){return FixtureManager},get FixtureManagerClass(){return FixtureManagerClass}});var _chalk=/*#__PURE__*/_interop_require_default(require("chalk"));var _lodash=/*#__PURE__*/_interop_require_default(require("lodash"));var _api=require("../api");var _entitymanager=require("../entity/entity-manager");var _types=require("../types/types");var _inflection=/*#__PURE__*/_interop_require_default(require("inflection"));var _fs=require("fs");var _relationgraph=require("./_relation-graph");var _knex=/*#__PURE__*/_interop_require_default(require("knex"));var _basemodel=require("../database/base-model");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 _array_without_holes(arr){if(Array.isArray(arr))return _array_like_to_array(arr)}function _async_iterator(iterable){var method,async,sync,retry=2;for("undefined"!=typeof Symbol&&(async=Symbol.asyncIterator,sync=Symbol.iterator);retry--;){if(async&&null!=(method=iterable[async]))return method.call(iterable);if(sync&&null!=(method=iterable[sync]))return new AsyncFromSyncIterator(method.call(iterable));async="@@asyncIterator",sync="@@iterator"}throw new TypeError("Object is not async iterable")}function AsyncFromSyncIterator(s){function AsyncFromSyncIteratorContinuation(r){if(Object(r)!==r)return Promise.reject(new TypeError(r+" is not an object."));var done=r.done;return Promise.resolve(r.value).then(function(value){return{value:value,done:done}})}return AsyncFromSyncIterator=function(s){this.s=s,this.n=s.next},AsyncFromSyncIterator.prototype={s:null,n:null,next:function(){return AsyncFromSyncIteratorContinuation(this.n.apply(this.s,arguments))},return:function(value){var ret=this.s.return;return void 0===ret?Promise.resolve({value:value,done:!0}):AsyncFromSyncIteratorContinuation(ret.apply(this.s,arguments))},throw:function(value){var thr=this.s.return;return void 0===thr?Promise.reject(value):AsyncFromSyncIteratorContinuation(thr.apply(this.s,arguments))}},new AsyncFromSyncIterator(s)}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 _iterable_to_array(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}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 _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 _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 _to_consumable_array(arr){return _array_without_holes(arr)||_iterable_to_array(arr)||_unsupported_iterable_to_array(arr)||_non_iterable_spread()}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 _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}}}function _ts_values(o){var s=typeof Symbol==="function"&&Symbol.iterator,m=s&&o[s],i=0;if(m)return m.call(o);if(o&&typeof o.length==="number")return{next:function(){if(o&&i>=o.length)o=void 0;return{value:o&&o[i++],done:!o}}};throw new TypeError(s?"Object is not iterable.":"Symbol.iterator is not defined.")}var FixtureManagerClass=/*#__PURE__*/function(){"use strict";function FixtureManagerClass(){_class_call_check(this,FixtureManagerClass);_define_property(this,"_tdb",null);_define_property(this,"_fdb",null);_define_property(this,"cachedTableNames",null);_define_property(this,"relationGraph",new _relationgraph.RelationGraph);_define_property(this,"visitedRecords",new Set)}_create_class(FixtureManagerClass,[{key:"tdb",get:function get(){if(this._tdb===null){throw new Error("FixtureManager has not been initialized")}return this._tdb},set:function set(tdb){this._tdb=tdb}},{key:"fdb",get:function get(){if(this._fdb===null){throw new Error("FixtureManager has not been initialized")}return this._fdb},set:function set(fdb){this._fdb=fdb}},{key:"init",value:function init(){if(this._tdb!==null){return}if(_api.Sonamu.dbConfig.test&&_api.Sonamu.dbConfig.production_master){var tConn=_api.Sonamu.dbConfig.test.connection;var pConn=_api.Sonamu.dbConfig.production_master.connection;var _tConn_host,_tConn_port,_pConn_host,_pConn_port;if("".concat((_tConn_host=tConn.host)!==null&&_tConn_host!==void 0?_tConn_host:"localhost",":").concat((_tConn_port=tConn.port)!==null&&_tConn_port!==void 0?_tConn_port:3306,"/").concat(tConn.database)==="".concat((_pConn_host=pConn.host)!==null&&_pConn_host!==void 0?_pConn_host:"localhost",":").concat((_pConn_port=pConn.port)!==null&&_pConn_port!==void 0?_pConn_port:3306,"/").concat(pConn.database)){throw new Error("테스트DB와 프로덕션DB에 동일한 데이터베이스가 사용되었습니다.")}}this.tdb=(0,_knex.default)(_api.Sonamu.dbConfig.test);this.fdb=(0,_knex.default)(_api.Sonamu.dbConfig.fixture_local)}},{key:"cleanAndSeed",value:function cleanAndSeed(usingTables){return _async_to_generator(function(){var _this,tableNames,tableListStr,_ref,fdbChecksumRows,_ref1,tdbChecksumRows,fdbChecksums,tdbChecksums,changedTables;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;return[4,function(){return _async_to_generator(function(){var _ref,tables,tableNames;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(usingTables){return[2,usingTables]}if(this.cachedTableNames){return[2,this.cachedTableNames]}return[4,this.tdb.raw("SHOW TABLE STATUS WHERE Engine IS NOT NULL AND Name != 'migrations'")];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),tables=_ref[0];tableNames=tables.map(function(tableInfo){return tableInfo["Name"]});this.cachedTableNames=tableNames;return[2,tableNames]}})}).call(_this)}()];case 1:tableNames=_state.sent();tableListStr=tableNames.join(", ");return[4,this.fdb.raw("CHECKSUM TABLE ".concat(tableListStr))];case 2:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),fdbChecksumRows=_ref[0];return[4,this.tdb.raw("CHECKSUM TABLE ".concat(tableListStr))];case 3:_ref1=_sliced_to_array.apply(void 0,[_state.sent(),1]),tdbChecksumRows=_ref1[0];fdbChecksums=new Map(fdbChecksumRows.map(function(row){return[row.Table.split(".").pop(),row.Checksum]}));tdbChecksums=new Map(tdbChecksumRows.map(function(row){return[row.Table.split(".").pop(),row.Checksum]}));changedTables=tableNames.filter(function(tableName){return fdbChecksums.get(tableName)!==tdbChecksums.get(tableName)});return[4,this.tdb.transaction(function(trx){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,trx.raw("SET FOREIGN_KEY_CHECKS = 0")];case 1:_state.sent();return[4,Promise.all(changedTables.map(function(tableName){return _async_to_generator(function(){var rawQuery;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,trx.raw("SET FOREIGN_KEY_CHECKS = 0")];case 1:_state.sent();return[4,trx(tableName).truncate()];case 2:_state.sent();rawQuery="INSERT INTO ".concat(_api.Sonamu.dbConfig.test.connection.database,".").concat(tableName,"\n SELECT * FROM ").concat(_api.Sonamu.dbConfig.fixture_local.connection.database,".").concat(tableName);return[4,trx.raw(rawQuery)];case 3:_state.sent();return[2]}})})()}))];case 2:_state.sent();return[4,trx.raw("SET FOREIGN_KEY_CHECKS = 1")];case 3:_state.sent();return[2]}})})()})];case 4:_state.sent();return[2]}})}).call(this)}},{key:"getChecksum",value:function getChecksum(db,tableName){return _async_to_generator(function(){var _ref,_ref_,checksumRow;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,db.raw("CHECKSUM TABLE ".concat(tableName))];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),_ref_=_sliced_to_array(_ref[0],1),checksumRow=_ref_[0];return[2,checksumRow.Checksum]}})})()}},{key:"sync",value:function sync(){return _async_to_generator(function(){var _this,frdb,_ref,tables,tableNames;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;frdb=(0,_knex.default)(_api.Sonamu.dbConfig.fixture_remote);return[4,this.fdb.raw("SHOW TABLE STATUS WHERE Engine IS NOT NULL")];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),tables=_ref[0];tableNames=tables.map(function(table){return table.Name});console.log(_chalk.default.magenta("SYNC..."));return[4,Promise.all(tableNames.map(function(tableName){return _async_to_generator(function(){var remoteChecksum,localChecksum;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(tableName.startsWith("knex_migrations")){return[2]}return[4,this.getChecksum(frdb,tableName)];case 1:remoteChecksum=_state.sent();return[4,this.getChecksum(this.fdb,tableName)];case 2:localChecksum=_state.sent();if(!(remoteChecksum!==localChecksum))return[3,4];return[4,this.fdb.transaction(function(transaction){return _async_to_generator(function(){var rows;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,transaction.raw("SET FOREIGN_KEY_CHECKS = 0")];case 1:_state.sent();return[4,transaction(tableName).truncate()];case 2:_state.sent();return[4,frdb(tableName)];case 3:rows=_state.sent();if(rows.length===0){return[2]}console.log(_chalk.default.blue(tableName),rows.length);return[4,transaction.insert(rows.map(function(row){return Object.fromEntries(Object.entries(row).map(function(param){var _param=_sliced_to_array(param,2),key=_param[0],value=_param[1];if(value===null){return[key,null]}else if(typeof value==="boolean"){return[key,value?1:0]}else if((typeof value==="undefined"?"undefined":_type_of(value))==="object"&&!_instanceof(value,Date)){return[key,JSON.stringify(value)]}else{return[key,value]}}))})).into(tableName)];case 4:_state.sent();console.log("OK");return[4,transaction.raw("SET FOREIGN_KEY_CHECKS = 1")];case 5:_state.sent();return[2]}})})()})];case 3:_state.sent();_state.label=4;case 4:return[2]}})}).call(_this)}))];case 2:_state.sent();console.log(_chalk.default.magenta("DONE!"));return[4,frdb.destroy()];case 3:_state.sent();return[2]}})}).call(this)}},{key:"importFixture",value:function importFixture(entityId,ids){return _async_to_generator(function(){var _this,queries,_,wdb,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_iterator,_step,query,_ref,rsh,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;this.visitedRecords.clear();_=_lodash.default.uniq;return[4,Promise.all(ids.map(function(id){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.getImportQueries(entityId,"id",id)];case 1:return[2,_state.sent()]}})}).call(_this)}))];case 1:queries=_.apply(_lodash.default,[_state.sent().flat()]);wdb=_basemodel.BaseModel.getDB("w");_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=2;case 2:_state.trys.push([2,7,8,9]);_iterator=queries[Symbol.iterator]();_state.label=3;case 3:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,6];query=_step.value;return[4,wdb.raw(query)];case 4:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),rsh=_ref[0];console.log({query:query,info:rsh.info});_state.label=5;case 5:_iteratorNormalCompletion=true;return[3,3];case 6:return[3,9];case 7:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,9];case 8:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 9:return[2]}})}).call(this)}},{key:"getImportQueries",value:function getImportQueries(entityId,field,id){return _async_to_generator(function(){var _this,recordKey,entity,wdb,_ref,row,fixtureDatabase,realDatabase,selfQuery,args,relQueries;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;recordKey="".concat(entityId,"#").concat(field,"#").concat(id);if(this.visitedRecords.has(recordKey)){return[2,[]]}this.visitedRecords.add(recordKey);console.log({entityId:entityId,field:field,id:id});entity=_entitymanager.EntityManager.get(entityId);wdb=_basemodel.BaseModel.getDB("w");return[4,wdb(entity.table).where(field,id).limit(1)];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),row=_ref[0];if(row===undefined){throw new Error("".concat(entityId,"#").concat(id," row를 찾을 수 없습니다."))}fixtureDatabase=_api.Sonamu.dbConfig.fixture_remote.connection.database;realDatabase=_api.Sonamu.dbConfig.production_master.connection.database;selfQuery="INSERT IGNORE INTO `".concat(fixtureDatabase,"`.`").concat(entity.table,"` (SELECT * FROM `").concat(realDatabase,"`.`").concat(entity.table,"` WHERE `id` = ").concat(id,")");args=Object.entries(entity.relations).filter(function(param){var _param=_sliced_to_array(param,2),relation=_param[1];return(0,_types.isBelongsToOneRelationProp)(relation)||(0,_types.isOneToOneRelationProp)(relation)&&relation.customJoinClause===undefined}).map(function(param){var _param=_sliced_to_array(param,2),relation=_param[1];var _$field;var _$id;if((0,_types.isOneToOneRelationProp)(relation)&&!relation.hasJoinColumn){var _relatedEntity_props_find;var relatedEntity=_entitymanager.EntityManager.get(relation.with);var relatedIdColumnName=(_relatedEntity_props_find=relatedEntity.props.find(function(p){return(0,_types.isRelationProp)(p)&&p.with===entity.id}))===null||_relatedEntity_props_find===void 0?void 0:_relatedEntity_props_find.name;if(!relatedIdColumnName){throw new Error("".concat(relatedEntity.id,"의 ").concat(entity.id," 관계 프롭을 찾을 수 없습니다."))}_$field="".concat(relatedIdColumnName,"_id");_$id=row["id"]}else{_$field="id";_$id=row["".concat(relation.name,"_id")]}return{entityId:relation.with,field:_$field,id:_$id}}).filter(function(arg){return arg.id!==null});return[4,Promise.all(args.map(function(args){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,this.getImportQueries(args.entityId,args.field,args.id)]})}).call(_this)}))];case 2:relQueries=_state.sent();return[2,_to_consumable_array(_lodash.default.uniq(relQueries.reverse().flat())).concat([selfQuery])]}})}).call(this)}},{key:"destroy",value:function destroy(){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:if(!this._tdb)return[3,2];return[4,this._tdb.destroy()];case 1:_state.sent();this._tdb=null;_state.label=2;case 2:if(!this._fdb)return[3,4];return[4,this._fdb.destroy()];case 3:_state.sent();this._fdb=null;_state.label=4;case 4:return[4,_basemodel.BaseModel.destroy()];case 5:_state.sent();return[2]}})}).call(this)}},{key:"getFixtures",value:function getFixtures(sourceDBName,targetDBName,searchOptions){return _async_to_generator(function(){var _entity_props_find,sourceDB,targetDB,entityId,field,value,searchType,entity,column,query,rows,fixtures,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_this,_loop,_iterator,_step,err,_iteratorAbruptCompletion,_didIteratorError1,_iteratorError1,_iterator1,_step1,_value,fixture,entity1,row,_ref,record,uniqueRow,_ref1,record1,err1;return _ts_generator(this,function(_state){switch(_state.label){case 0:sourceDB=(0,_knex.default)(_api.Sonamu.dbConfig[sourceDBName]);targetDB=(0,_knex.default)(_api.Sonamu.dbConfig[targetDBName]);entityId=searchOptions.entityId,field=searchOptions.field,value=searchOptions.value,searchType=searchOptions.searchType;entity=_entitymanager.EntityManager.get(entityId);column=((_entity_props_find=entity.props.find(function(prop){return prop.name===field}))===null||_entity_props_find===void 0?void 0:_entity_props_find.type)==="relation"?"".concat(field,"_id"):field;query=sourceDB(entity.table);if(searchType==="equals"){query=query.where(column,value)}else if(searchType==="like"){query=query.where(column,"like","%".concat(value,"%"))}return[4,query];case 1:rows=_state.sent();if(rows.length===0){throw new Error("No records found")}fixtures=[];_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=2;case 2:_state.trys.push([2,7,8,9]);_loop=function(){var row,_fixtures,initialRecordsLength,newRecords,currentFixtureRecord;return _ts_generator(this,function(_state){switch(_state.label){case 0:row=_step.value;initialRecordsLength=fixtures.length;return[4,_this.createFixtureRecord(entity,row)];case 1:newRecords=_state.sent();(_fixtures=fixtures).push.apply(_fixtures,_to_consumable_array(newRecords));currentFixtureRecord=fixtures.find(function(r){return r.fixtureId==="".concat(entityId,"#").concat(row.id)});if(currentFixtureRecord){currentFixtureRecord.fetchedRecords=fixtures.filter(function(r){return r.fixtureId!==currentFixtureRecord.fixtureId}).slice(initialRecordsLength).map(function(r){return r.fixtureId})}return[2]}})};_iterator=rows[Symbol.iterator]();_state.label=3;case 3:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,6];_this=this;return[5,_ts_values(_loop())];case 4:_state.sent();_state.label=5;case 5:_iteratorNormalCompletion=true;return[3,3];case 6:return[3,9];case 7:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,9];case 8:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 9:_iteratorAbruptCompletion=false,_didIteratorError1=false;_state.label=10;case 10:_state.trys.push([10,20,21,26]);_iterator1=_async_iterator(fixtures);_state.label=11;case 11:return[4,_iterator1.next()];case 12:if(!(_iteratorAbruptCompletion=!(_step1=_state.sent()).done))return[3,19];_value=_step1.value;fixture=_value;entity1=_entitymanager.EntityManager.get(fixture.entityId);return[4,targetDB(entity1.table).where("id",fixture.id).first()];case 13:row=_state.sent();if(!row)return[3,15];return[4,this.createFixtureRecord(entity1,row,{singleRecord:true,_db:targetDB})];case 14:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),record=_ref[0];fixture.target=record;return[3,18];case 15:return[4,this.checkUniqueViolation(targetDB,entity1,fixture)];case 16:uniqueRow=_state.sent();if(!uniqueRow)return[3,18];return[4,this.createFixtureRecord(entity1,uniqueRow,{singleRecord:true,_db:targetDB})];case 17:_ref1=_sliced_to_array.apply(void 0,[_state.sent(),1]),record1=_ref1[0];fixture.unique=record1;_state.label=18;case 18:_iteratorAbruptCompletion=false;return[3,11];case 19:return[3,26];case 20:err1=_state.sent();_didIteratorError1=true;_iteratorError1=err1;return[3,26];case 21:_state.trys.push([21,,24,25]);if(!(_iteratorAbruptCompletion&&_iterator1.return!=null))return[3,23];return[4,_iterator1.return()];case 22:_state.sent();_state.label=23;case 23:return[3,25];case 24:if(_didIteratorError1){throw _iteratorError1}return[7];case 25:return[7];case 26:return[2,_lodash.default.uniqBy(fixtures,function(f){return f.fixtureId})]}})}).call(this)}},{key:"createFixtureRecord",value:function createFixtureRecord(entity,row,options){return _async_to_generator(function(){var records,visitedEntities,create;return _ts_generator(this,function(_state){switch(_state.label){case 0:records=[];visitedEntities=new Set;create=function(entity,row){return _async_to_generator(function(){var fixtureId,record,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_iterator,_step,prop,_options__db,db,relatedEntity,throughTable,fromColumn,toColumn,relatedIds,relatedEntity1,relatedIds1,relatedEntity2,relatedProp,relatedRow,relatedId,relatedEntity3,relatedRow1,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:fixtureId="".concat(entity.id,"#").concat(row.id);if(visitedEntities.has(fixtureId)){return[2]}visitedEntities.add(fixtureId);record={fixtureId:fixtureId,entityId:entity.id,id:row.id,columns:{},fetchedRecords:[],belongsRecords:[]};_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=1;case 1:_state.trys.push([1,14,15,16]);_iterator=entity.props[Symbol.iterator]();_state.label=2;case 2:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,13];prop=_step.value;if((0,_types.isVirtualProp)(prop)){return[3,12]}record.columns[prop.name]={prop:prop,value:row[prop.name]};db=(_options__db=options===null||options===void 0?void 0:options._db)!==null&&_options__db!==void 0?_options__db:_basemodel.BaseModel.getDB("w");if(!(0,_types.isManyToManyRelationProp)(prop))return[3,4];relatedEntity=_entitymanager.EntityManager.get(prop.with);throughTable=prop.joinTable;fromColumn="".concat(_inflection.default.singularize(entity.table),"_id");toColumn="".concat(_inflection.default.singularize(relatedEntity.table),"_id");return[4,db(throughTable).where(fromColumn,row.id).pluck(toColumn)];case 3:relatedIds=_state.sent();record.columns[prop.name].value=relatedIds;return[3,12];case 4:if(!(0,_types.isHasManyRelationProp)(prop))return[3,6];relatedEntity1=_entitymanager.EntityManager.get(prop.with);return[4,db(relatedEntity1.table).where(prop.joinColumn,row.id).pluck("id")];case 5:relatedIds1=_state.sent();record.columns[prop.name].value=relatedIds1;return[3,12];case 6:if(!((0,_types.isOneToOneRelationProp)(prop)&&!prop.hasJoinColumn))return[3,9];relatedEntity2=_entitymanager.EntityManager.get(prop.with);relatedProp=relatedEntity2.props.find(function(p){return(0,_types.isRelationProp)(p)&&p.with===entity.id});if(!relatedProp)return[3,8];return[4,db(relatedEntity2.table).where("id",row.id).first()];case 7:relatedRow=_state.sent();record.columns[prop.name].value=relatedRow===null||relatedRow===void 0?void 0:relatedRow.id;_state.label=8;case 8:return[3,12];case 9:if(!(0,_types.isRelationProp)(prop))return[3,12];relatedId=row["".concat(prop.name,"_id")];record.columns[prop.name].value=relatedId;if(relatedId){record.belongsRecords.push("".concat(prop.with,"#").concat(relatedId))}if(!(!(options===null||options===void 0?void 0:options.singleRecord)&&relatedId))return[3,12];relatedEntity3=_entitymanager.EntityManager.get(prop.with);return[4,db(relatedEntity3.table).where("id",relatedId).first()];case 10:relatedRow1=_state.sent();if(!relatedRow1)return[3,12];return[4,create(relatedEntity3,relatedRow1)];case 11:_state.sent();_state.label=12;case 12:_iteratorNormalCompletion=true;return[3,2];case 13:return[3,16];case 14:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,16];case 15:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 16:records.push(record);return[2]}})})()};return[4,create(entity,row)];case 1:_state.sent();return[2,records]}})})()}},{key:"insertFixtures",value:function insertFixtures(dbName,_fixtures){return _async_to_generator(function(){var _this,fixtures,insertionOrder,db,records,_iteratorAbruptCompletion,_didIteratorError,_iteratorError,_iterator,_step,_value,r,entity,record,err1;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;fixtures=_lodash.default.uniqBy(_fixtures,function(f){return f.fixtureId});this.relationGraph.buildGraph(fixtures);insertionOrder=this.relationGraph.getInsertionOrder();db=(0,_knex.default)(_api.Sonamu.dbConfig[dbName]);return[4,db.transaction(function(trx){return _async_to_generator(function(){var _iteratorNormalCompletion,_didIteratorError,_iteratorError,_this,_loop,_iterator,_step,err,_iteratorNormalCompletion1,_didIteratorError1,_iteratorError1,_this1,_loop1,_iterator1,_step1,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,trx.raw("SET FOREIGN_KEY_CHECKS = 0")];case 1:_state.sent();_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=2;case 2:_state.trys.push([2,7,8,9]);_loop=function(){var fixtureId,fixture,result;return _ts_generator(this,function(_state){switch(_state.label){case 0:fixtureId=_step.value;fixture=fixtures.find(function(f){return f.fixtureId===fixtureId});return[4,_this.insertFixture(trx,fixture)];case 1:result=_state.sent();if(result.id!==fixture.id){console.log(_chalk.default.yellow("Unique constraint violation: ".concat(fixture.entityId,"#").concat(fixture.id," -> ").concat(fixture.entityId,"#").concat(result.id)));fixtures.forEach(function(f){Object.values(f.columns).forEach(function(column){if(column.prop.type==="relation"&&column.prop.with===result.entityId&&column.value===fixture.id){column.value=result.id}})});fixture.id=result.id}return[2]}})};_iterator=insertionOrder[Symbol.iterator]();_state.label=3;case 3:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,6];_this=this;return[5,_ts_values(_loop())];case 4:_state.sent();_state.label=5;case 5:_iteratorNormalCompletion=true;return[3,3];case 6:return[3,9];case 7:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,9];case 8:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 9:_iteratorNormalCompletion1=true,_didIteratorError1=false,_iteratorError1=undefined;_state.label=10;case 10:_state.trys.push([10,15,16,17]);_loop1=function(){var fixtureId,fixture;return _ts_generator(this,function(_state){switch(_state.label){case 0:fixtureId=_step1.value;fixture=fixtures.find(function(f){return f.fixtureId===fixtureId});return[4,_this1.handleManyToManyRelations(trx,fixture,fixtures)];case 1:_state.sent();return[2]}})};_iterator1=insertionOrder[Symbol.iterator]();_state.label=11;case 11:if(!!(_iteratorNormalCompletion1=(_step1=_iterator1.next()).done))return[3,14];_this1=this;return[5,_ts_values(_loop1())];case 12:_state.sent();_state.label=13;case 13:_iteratorNormalCompletion1=true;return[3,11];case 14:return[3,17];case 15:err=_state.sent();_didIteratorError1=true;_iteratorError1=err;return[3,17];case 16:try{if(!_iteratorNormalCompletion1&&_iterator1.return!=null){_iterator1.return()}}finally{if(_didIteratorError1){throw _iteratorError1}}return[7];case 17:return[4,trx.raw("SET FOREIGN_KEY_CHECKS = 1")];case 18:_state.sent();return[2]}})}).call(_this)})];case 1:_state.sent();records=[];_iteratorAbruptCompletion=false,_didIteratorError=false;_state.label=2;case 2:_state.trys.push([2,8,9,14]);_iterator=_async_iterator(fixtures);_state.label=3;case 3:return[4,_iterator.next()];case 4:if(!(_iteratorAbruptCompletion=!(_step=_state.sent()).done))return[3,7];_value=_step.value;r=_value;entity=_entitymanager.EntityManager.get(r.entityId);return[4,db(entity.table).where("id",r.id).first()];case 5:record=_state.sent();records.push({entityId:r.entityId,data:record});_state.label=6;case 6:_iteratorAbruptCompletion=false;return[3,3];case 7:return[3,14];case 8:err1=_state.sent();_didIteratorError=true;_iteratorError=err1;return[3,14];case 9:_state.trys.push([9,,12,13]);if(!(_iteratorAbruptCompletion&&_iterator.return!=null))return[3,11];return[4,_iterator.return()];case 10:_state.sent();_state.label=11;case 11:return[3,13];case 12:if(_didIteratorError){throw _iteratorError}return[7];case 13:return[7];case 14:return[2,_lodash.default.uniqBy(records,function(r){return"".concat(r.entityId,"#").concat(r.data.id)})]}})}).call(this)}},{key:"prepareInsertData",value:function prepareInsertData(fixture){var insertData={};var _iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;try{for(var _iterator=Object.entries(fixture.columns)[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var _step_value=_sliced_to_array(_step.value,2),propName=_step_value[0],column=_step_value[1];if((0,_types.isVirtualProp)(column.prop)){continue}var prop=column.prop;if(!(0,_types.isRelationProp)(prop)){if(prop.type==="json"){insertData[propName]=JSON.stringify(column.value)}else{insertData[propName]=column.value}}else if((0,_types.isBelongsToOneRelationProp)(prop)||(0,_types.isOneToOneRelationProp)(prop)&&prop.hasJoinColumn){insertData["".concat(propName,"_id")]=column.value}}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}return insertData}},{key:"insertFixture",value:function insertFixture(db,fixture){return _async_to_generator(function(){var insertData,entity,uniqueFound,found,q,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:insertData=this.prepareInsertData(fixture);entity=_entitymanager.EntityManager.get(fixture.entityId);_state.label=1;case 1:_state.trys.push([1,5,,6]);return[4,this.checkUniqueViolation(db,entity,fixture)];case 2:uniqueFound=_state.sent();if(uniqueFound){return[2,{entityId:fixture.entityId,id:uniqueFound.id}]}return[4,db(entity.table).where("id",fixture.id).first()];case 3:found=_state.sent();if(found&&!fixture.override){return[2,{entityId:fixture.entityId,id:found.id}]}q=db.insert(insertData).into(entity.table);return[4,q.onDuplicateUpdate.apply(q,Object.keys(insertData))];case 4:_state.sent();return[2,{entityId:fixture.entityId,id:fixture.id}];case 5:err=_state.sent();console.log(err);throw err;case 6:return[2]}})}).call(this)}},{key:"handleManyToManyRelations",value:function handleManyToManyRelations(db,fixture,fixtures){return _async_to_generator(function(){var _iteratorNormalCompletion,_didIteratorError,_iteratorError,_loop,_iterator,_step,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=1;case 1:_state.trys.push([1,6,7,8]);_loop=function(){var _step_value,column,prop,joinTable,relatedIds,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_loop,_iterator,_step1,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:_step_value=_sliced_to_array(_step.value,2),column=_step_value[1];prop=column.prop;if(!(0,_types.isManyToManyRelationProp)(prop))return[3,8];joinTable=prop.joinTable;relatedIds=column.value;_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=1;case 1:_state.trys.push([1,6,7,8]);_loop=function(){var relatedId,entity,relatedEntity,_obj,_ref,found,_obj1,newIds;return _ts_generator(this,function(_state){switch(_state.label){case 0:relatedId=_step1.value;if(!fixtures.find(function(f){return f.fixtureId==="".concat(prop.with,"#").concat(relatedId)})){return[2,"continue"]}entity=_entitymanager.EntityManager.get(fixture.entityId);relatedEntity=_entitymanager.EntityManager.get(prop.with);if(!entity||!relatedEntity){throw new Error("Entity not found: ".concat(fixture.entityId,", ").concat(prop.with))}return[4,db(joinTable).where((_obj={},_define_property(_obj,"".concat(_inflection.default.singularize(entity.table),"_id"),fixture.id),_define_property(_obj,"".concat(_inflection.default.singularize(relatedEntity.table),"_id"),relatedId),_obj)).limit(1)];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),found=_ref[0];if(found){return[2,"continue"]}return[4,db(joinTable).insert((_obj1={},_define_property(_obj1,"".concat(_inflection.default.singularize(entity.table),"_id"),fixture.id),_define_property(_obj1,"".concat(_inflection.default.singularize(relatedEntity.table),"_id"),relatedId),_obj1))];case 2:newIds=_state.sent();console.log(_chalk.default.green("Inserted into ".concat(joinTable,": ").concat(entity.table,"(").concat(fixture.id,") - ").concat(relatedEntity.table,"(").concat(relatedId,") ID: ").concat(newIds)));return[2]}})};_iterator=relatedIds[Symbol.iterator]();_state.label=2;case 2:if(!!(_iteratorNormalCompletion=(_step1=_iterator.next()).done))return[3,5];return[5,_ts_values(_loop())];case 3:_state.sent();_state.label=4;case 4:_iteratorNormalCompletion=true;return[3,2];case 5:return[3,8];case 6:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,8];case 7:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 8:return[2]}})};_iterator=Object.entries(fixture.columns)[Symbol.iterator]();_state.label=2;case 2:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,5];return[5,_ts_values(_loop())];case 3:_state.sent();_state.label=4;case 4:_iteratorNormalCompletion=true;return[3,2];case 5:return[3,8];case 6:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,8];case 7:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 8:return[2]}})})()}},{key:"addFixtureLoader",value:function addFixtureLoader(code){return _async_to_generator(function(){var path,content,fixtureLoaderStart,fixtureLoaderEnd,newContent;return _ts_generator(this,function(_state){path=_api.Sonamu.apiRootPath+"/src/testing/fixture.ts";content=(0,_fs.readFileSync)(path).toString();fixtureLoaderStart=content.indexOf("const fixtureLoader = {");fixtureLoaderEnd=content.indexOf("};",fixtureLoaderStart);if(fixtureLoaderStart!==-1&&fixtureLoaderEnd!==-1){newContent=content.slice(0,fixtureLoaderEnd)+" "+code+"\n"+content.slice(fixtureLoaderEnd);(0,_fs.writeFileSync)(path,newContent)}else{throw new Error("Failed to find fixtureLoader in fixture.ts")}return[2]})})()}},{key:"checkUniqueViolation",value:function checkUniqueViolation(db,entity,fixture){return _async_to_generator(function(){var _uniqueIndexes,uniqueIndexes,uniqueQuery,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_loop,_iterator,_step,_ref,uniqueFound;return _ts_generator(this,function(_state){switch(_state.label){case 0:_uniqueIndexes=entity.indexes.filter(function(i){return i.type==="unique"});uniqueIndexes=_uniqueIndexes.filter(function(index){return index.columns.every(function(column){return!column.startsWith("".concat(entity.table,"__"))})});if(uniqueIndexes.length===0){return[2,null]}uniqueQuery=db(entity.table);_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;try{_loop=function(){var index=_step.value;var containsNull=index.columns.some(function(column){var field=column.split("_id")[0];return fixture.columns[field].value===null});if(containsNull){return"continue"}uniqueQuery=uniqueQuery.orWhere(function(qb){var _iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;try{for(var _iterator=index.columns[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var column=_step.value;var field=column.split("_id")[0];if(Array.isArray(fixture.columns[field].value)){qb.whereIn(column,fixture.columns[field].value)}else{qb.andWhere(column,fixture.columns[field].value)}}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}})};for(_iterator=uniqueIndexes[Symbol.iterator]();!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true)_loop()}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}return[4,uniqueQuery];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),uniqueFound=_ref[0];return[2,uniqueFound]}})})()}}]);return FixtureManagerClass}();var FixtureManager=new FixtureManagerClass;
|
|
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 FixtureManager(){return FixtureManager},get FixtureManagerClass(){return FixtureManagerClass}});var _chalk=/*#__PURE__*/_interop_require_default(require("chalk"));var _lodash=/*#__PURE__*/_interop_require_default(require("lodash"));var _api=require("../api");var _entitymanager=require("../entity/entity-manager");var _types=require("../types/types");var _inflection=/*#__PURE__*/_interop_require_default(require("inflection"));var _fs=require("fs");var _relationgraph=require("./_relation-graph");var _knex=/*#__PURE__*/_interop_require_default(require("knex"));var _basemodel=require("../database/base-model");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 _array_without_holes(arr){if(Array.isArray(arr))return _array_like_to_array(arr)}function _async_iterator(iterable){var method,async,sync,retry=2;for("undefined"!=typeof Symbol&&(async=Symbol.asyncIterator,sync=Symbol.iterator);retry--;){if(async&&null!=(method=iterable[async]))return method.call(iterable);if(sync&&null!=(method=iterable[sync]))return new AsyncFromSyncIterator(method.call(iterable));async="@@asyncIterator",sync="@@iterator"}throw new TypeError("Object is not async iterable")}function AsyncFromSyncIterator(s){function AsyncFromSyncIteratorContinuation(r){if(Object(r)!==r)return Promise.reject(new TypeError(r+" is not an object."));var done=r.done;return Promise.resolve(r.value).then(function(value){return{value:value,done:done}})}return AsyncFromSyncIterator=function(s){this.s=s,this.n=s.next},AsyncFromSyncIterator.prototype={s:null,n:null,next:function(){return AsyncFromSyncIteratorContinuation(this.n.apply(this.s,arguments))},return:function(value){var ret=this.s.return;return void 0===ret?Promise.resolve({value:value,done:!0}):AsyncFromSyncIteratorContinuation(ret.apply(this.s,arguments))},throw:function(value){var thr=this.s.return;return void 0===thr?Promise.reject(value):AsyncFromSyncIteratorContinuation(thr.apply(this.s,arguments))}},new AsyncFromSyncIterator(s)}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 _iterable_to_array(iter){if(typeof Symbol!=="undefined"&&iter[Symbol.iterator]!=null||iter["@@iterator"]!=null)return Array.from(iter)}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 _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 _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 _to_consumable_array(arr){return _array_without_holes(arr)||_iterable_to_array(arr)||_unsupported_iterable_to_array(arr)||_non_iterable_spread()}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 _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}}}function _ts_values(o){var s=typeof Symbol==="function"&&Symbol.iterator,m=s&&o[s],i=0;if(m)return m.call(o);if(o&&typeof o.length==="number")return{next:function(){if(o&&i>=o.length)o=void 0;return{value:o&&o[i++],done:!o}}};throw new TypeError(s?"Object is not iterable.":"Symbol.iterator is not defined.")}var FixtureManagerClass=/*#__PURE__*/function(){"use strict";function FixtureManagerClass(){_class_call_check(this,FixtureManagerClass);_define_property(this,"_tdb",null);_define_property(this,"_fdb",null);_define_property(this,"cachedTableNames",null);_define_property(this,"relationGraph",new _relationgraph.RelationGraph);_define_property(this,"visitedRecords",new Set)}_create_class(FixtureManagerClass,[{key:"tdb",get:function get(){if(this._tdb===null){throw new Error("FixtureManager has not been initialized")}return this._tdb},set:function set(tdb){this._tdb=tdb}},{key:"fdb",get:function get(){if(this._fdb===null){throw new Error("FixtureManager has not been initialized")}return this._fdb},set:function set(fdb){this._fdb=fdb}},{key:"init",value:function init(){if(this._tdb!==null){return}if(_api.Sonamu.dbConfig.test&&_api.Sonamu.dbConfig.production_master){var tConn=_api.Sonamu.dbConfig.test.connection;var pConn=_api.Sonamu.dbConfig.production_master.connection;var _tConn_host,_tConn_port,_pConn_host,_pConn_port;if("".concat((_tConn_host=tConn.host)!==null&&_tConn_host!==void 0?_tConn_host:"localhost",":").concat((_tConn_port=tConn.port)!==null&&_tConn_port!==void 0?_tConn_port:3306,"/").concat(tConn.database)==="".concat((_pConn_host=pConn.host)!==null&&_pConn_host!==void 0?_pConn_host:"localhost",":").concat((_pConn_port=pConn.port)!==null&&_pConn_port!==void 0?_pConn_port:3306,"/").concat(pConn.database)){throw new Error("테스트DB와 프로덕션DB에 동일한 데이터베이스가 사용되었습니다.")}}this.tdb=(0,_knex.default)(_api.Sonamu.dbConfig.test);this.fdb=(0,_knex.default)(_api.Sonamu.dbConfig.fixture_local)}},{key:"cleanAndSeed",value:function cleanAndSeed(usingTables){return _async_to_generator(function(){var _this,tableNames,tableListStr,_ref,fdbChecksumRows,_ref1,tdbChecksumRows,fdbChecksums,tdbChecksums,changedTables;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;return[4,function(){return _async_to_generator(function(){var _ref,tables,tableNames;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(usingTables){return[2,usingTables]}if(this.cachedTableNames){return[2,this.cachedTableNames]}return[4,this.tdb.raw("SHOW TABLE STATUS WHERE Engine IS NOT NULL AND Name != 'migrations'")];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),tables=_ref[0];tableNames=tables.map(function(tableInfo){return tableInfo["Name"]});this.cachedTableNames=tableNames;return[2,tableNames]}})}).call(_this)}()];case 1:tableNames=_state.sent();tableListStr=tableNames.join(", ");return[4,this.fdb.raw("CHECKSUM TABLE ".concat(tableListStr))];case 2:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),fdbChecksumRows=_ref[0];return[4,this.tdb.raw("CHECKSUM TABLE ".concat(tableListStr))];case 3:_ref1=_sliced_to_array.apply(void 0,[_state.sent(),1]),tdbChecksumRows=_ref1[0];fdbChecksums=new Map(fdbChecksumRows.map(function(row){return[row.Table.split(".").pop(),row.Checksum]}));tdbChecksums=new Map(tdbChecksumRows.map(function(row){return[row.Table.split(".").pop(),row.Checksum]}));changedTables=tableNames.filter(function(tableName){return fdbChecksums.get(tableName)!==tdbChecksums.get(tableName)});return[4,this.tdb.transaction(function(trx){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,trx.raw("SET FOREIGN_KEY_CHECKS = 0")];case 1:_state.sent();return[4,Promise.all(changedTables.map(function(tableName){return _async_to_generator(function(){var rawQuery;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,trx.raw("SET FOREIGN_KEY_CHECKS = 0")];case 1:_state.sent();return[4,trx(tableName).truncate()];case 2:_state.sent();rawQuery="INSERT INTO ".concat(_api.Sonamu.dbConfig.test.connection.database,".").concat(tableName,"\n SELECT * FROM ").concat(_api.Sonamu.dbConfig.fixture_local.connection.database,".").concat(tableName);return[4,trx.raw(rawQuery)];case 3:_state.sent();return[2]}})})()}))];case 2:_state.sent();return[4,trx.raw("SET FOREIGN_KEY_CHECKS = 1")];case 3:_state.sent();return[2]}})})()})];case 4:_state.sent();return[2]}})}).call(this)}},{key:"getChecksum",value:function getChecksum(db,tableName){return _async_to_generator(function(){var _ref,_ref_,checksumRow;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,db.raw("CHECKSUM TABLE ".concat(tableName))];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),_ref_=_sliced_to_array(_ref[0],1),checksumRow=_ref_[0];return[2,checksumRow.Checksum]}})})()}},{key:"sync",value:function sync(){return _async_to_generator(function(){var _this,frdb,_ref,tables,tableNames;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;frdb=(0,_knex.default)(_api.Sonamu.dbConfig.fixture_remote);return[4,this.fdb.raw("SHOW TABLE STATUS WHERE Engine IS NOT NULL")];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),tables=_ref[0];tableNames=tables.map(function(table){return table.Name});console.log(_chalk.default.magenta("SYNC..."));return[4,Promise.all(tableNames.map(function(tableName){return _async_to_generator(function(){var remoteChecksum,localChecksum;return _ts_generator(this,function(_state){switch(_state.label){case 0:if(tableName.startsWith("knex_migrations")){return[2]}return[4,this.getChecksum(frdb,tableName)];case 1:remoteChecksum=_state.sent();return[4,this.getChecksum(this.fdb,tableName)];case 2:localChecksum=_state.sent();if(!(remoteChecksum!==localChecksum))return[3,4];return[4,this.fdb.transaction(function(transaction){return _async_to_generator(function(){var rows;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,transaction.raw("SET FOREIGN_KEY_CHECKS = 0")];case 1:_state.sent();return[4,transaction(tableName).truncate()];case 2:_state.sent();return[4,frdb(tableName)];case 3:rows=_state.sent();if(rows.length===0){return[2]}console.log(_chalk.default.blue(tableName),rows.length);return[4,transaction.insert(rows.map(function(row){return Object.fromEntries(Object.entries(row).map(function(param){var _param=_sliced_to_array(param,2),key=_param[0],value=_param[1];if(value===null){return[key,null]}else if(typeof value==="boolean"){return[key,value?1:0]}else if((typeof value==="undefined"?"undefined":_type_of(value))==="object"&&!_instanceof(value,Date)){return[key,JSON.stringify(value)]}else{return[key,value]}}))})).into(tableName)];case 4:_state.sent();console.log("OK");return[4,transaction.raw("SET FOREIGN_KEY_CHECKS = 1")];case 5:_state.sent();return[2]}})})()})];case 3:_state.sent();_state.label=4;case 4:return[2]}})}).call(_this)}))];case 2:_state.sent();console.log(_chalk.default.magenta("DONE!"));return[4,frdb.destroy()];case 3:_state.sent();return[2]}})}).call(this)}},{key:"importFixture",value:function importFixture(entityId,ids){return _async_to_generator(function(){var _this,queries,_,wdb,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_iterator,_step,query,_ref,rsh,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;this.visitedRecords.clear();_=_lodash.default.uniq;return[4,Promise.all(ids.map(function(id){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,this.getImportQueries(entityId,"id",id)];case 1:return[2,_state.sent()]}})}).call(_this)}))];case 1:queries=_.apply(_lodash.default,[_state.sent().flat()]);wdb=_basemodel.BaseModel.getDB("w");_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=2;case 2:_state.trys.push([2,7,8,9]);_iterator=queries[Symbol.iterator]();_state.label=3;case 3:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,6];query=_step.value;return[4,wdb.raw(query)];case 4:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),rsh=_ref[0];console.log({query:query,info:rsh.info});_state.label=5;case 5:_iteratorNormalCompletion=true;return[3,3];case 6:return[3,9];case 7:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,9];case 8:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 9:return[2]}})}).call(this)}},{key:"getImportQueries",value:function getImportQueries(entityId,field,id){return _async_to_generator(function(){var _this,recordKey,entity,wdb,_ref,row,fixtureDatabase,realDatabase,selfQuery,args,relQueries;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;recordKey="".concat(entityId,"#").concat(field,"#").concat(id);if(this.visitedRecords.has(recordKey)){return[2,[]]}this.visitedRecords.add(recordKey);console.log({entityId:entityId,field:field,id:id});entity=_entitymanager.EntityManager.get(entityId);wdb=_basemodel.BaseModel.getDB("w");return[4,wdb(entity.table).where(field,id).limit(1)];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),row=_ref[0];if(row===undefined){throw new Error("".concat(entityId,"#").concat(id," row를 찾을 수 없습니다."))}fixtureDatabase=_api.Sonamu.dbConfig.fixture_remote.connection.database;realDatabase=_api.Sonamu.dbConfig.production_master.connection.database;selfQuery="INSERT IGNORE INTO `".concat(fixtureDatabase,"`.`").concat(entity.table,"` (SELECT * FROM `").concat(realDatabase,"`.`").concat(entity.table,"` WHERE `id` = ").concat(id,")");args=Object.entries(entity.relations).filter(function(param){var _param=_sliced_to_array(param,2),relation=_param[1];return(0,_types.isBelongsToOneRelationProp)(relation)||(0,_types.isOneToOneRelationProp)(relation)&&relation.customJoinClause===undefined}).map(function(param){var _param=_sliced_to_array(param,2),relation=_param[1];var _$field;var _$id;if((0,_types.isOneToOneRelationProp)(relation)&&!relation.hasJoinColumn){var _relatedEntity_props_find;var relatedEntity=_entitymanager.EntityManager.get(relation.with);var relatedIdColumnName=(_relatedEntity_props_find=relatedEntity.props.find(function(p){return(0,_types.isRelationProp)(p)&&p.with===entity.id}))===null||_relatedEntity_props_find===void 0?void 0:_relatedEntity_props_find.name;if(!relatedIdColumnName){throw new Error("".concat(relatedEntity.id,"의 ").concat(entity.id," 관계 프롭을 찾을 수 없습니다."))}_$field="".concat(relatedIdColumnName,"_id");_$id=row["id"]}else{_$field="id";_$id=row["".concat(relation.name,"_id")]}return{entityId:relation.with,field:_$field,id:_$id}}).filter(function(arg){return arg.id!==null});return[4,Promise.all(args.map(function(args){return _async_to_generator(function(){return _ts_generator(this,function(_state){return[2,this.getImportQueries(args.entityId,args.field,args.id)]})}).call(_this)}))];case 2:relQueries=_state.sent();return[2,_to_consumable_array(_lodash.default.uniq(relQueries.reverse().flat())).concat([selfQuery])]}})}).call(this)}},{key:"destroy",value:function destroy(){return _async_to_generator(function(){return _ts_generator(this,function(_state){switch(_state.label){case 0:if(!this._tdb)return[3,2];return[4,this._tdb.destroy()];case 1:_state.sent();this._tdb=null;_state.label=2;case 2:if(!this._fdb)return[3,4];return[4,this._fdb.destroy()];case 3:_state.sent();this._fdb=null;_state.label=4;case 4:return[4,_basemodel.BaseModel.destroy()];case 5:_state.sent();return[2]}})}).call(this)}},{key:"getFixtures",value:function getFixtures(sourceDBName,targetDBName,searchOptions){return _async_to_generator(function(){var _entity_props_find,sourceDB,targetDB,entityId,field,value,searchType,entity,column,query,rows,fixtures,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_this,_loop,_iterator,_step,err,_iteratorAbruptCompletion,_didIteratorError1,_iteratorError1,_iterator1,_step1,_value,fixture,entity1,row,_ref,record,uniqueRow,_ref1,record1,err1;return _ts_generator(this,function(_state){switch(_state.label){case 0:sourceDB=(0,_knex.default)(_api.Sonamu.dbConfig[sourceDBName]);targetDB=(0,_knex.default)(_api.Sonamu.dbConfig[targetDBName]);entityId=searchOptions.entityId,field=searchOptions.field,value=searchOptions.value,searchType=searchOptions.searchType;entity=_entitymanager.EntityManager.get(entityId);column=((_entity_props_find=entity.props.find(function(prop){return prop.name===field}))===null||_entity_props_find===void 0?void 0:_entity_props_find.type)==="relation"?"".concat(field,"_id"):field;query=sourceDB(entity.table);if(searchType==="equals"){query=query.where(column,value)}else if(searchType==="like"){query=query.where(column,"like","%".concat(value,"%"))}return[4,query];case 1:rows=_state.sent();if(rows.length===0){throw new Error("No records found")}fixtures=[];_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=2;case 2:_state.trys.push([2,7,8,9]);_loop=function(){var row,_fixtures,initialRecordsLength,newRecords,currentFixtureRecord;return _ts_generator(this,function(_state){switch(_state.label){case 0:row=_step.value;initialRecordsLength=fixtures.length;return[4,_this.createFixtureRecord(entity,row)];case 1:newRecords=_state.sent();(_fixtures=fixtures).push.apply(_fixtures,_to_consumable_array(newRecords));currentFixtureRecord=fixtures.find(function(r){return r.fixtureId==="".concat(entityId,"#").concat(row.id)});if(currentFixtureRecord){currentFixtureRecord.fetchedRecords=fixtures.filter(function(r){return r.fixtureId!==currentFixtureRecord.fixtureId}).slice(initialRecordsLength).map(function(r){return r.fixtureId})}return[2]}})};_iterator=rows[Symbol.iterator]();_state.label=3;case 3:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,6];_this=this;return[5,_ts_values(_loop())];case 4:_state.sent();_state.label=5;case 5:_iteratorNormalCompletion=true;return[3,3];case 6:return[3,9];case 7:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,9];case 8:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 9:_iteratorAbruptCompletion=false,_didIteratorError1=false;_state.label=10;case 10:_state.trys.push([10,20,21,26]);_iterator1=_async_iterator(fixtures);_state.label=11;case 11:return[4,_iterator1.next()];case 12:if(!(_iteratorAbruptCompletion=!(_step1=_state.sent()).done))return[3,19];_value=_step1.value;fixture=_value;entity1=_entitymanager.EntityManager.get(fixture.entityId);return[4,targetDB(entity1.table).where("id",fixture.id).first()];case 13:row=_state.sent();if(!row)return[3,15];return[4,this.createFixtureRecord(entity1,row,{singleRecord:true,_db:targetDB})];case 14:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),record=_ref[0];fixture.target=record;return[3,18];case 15:return[4,this.checkUniqueViolation(targetDB,entity1,fixture)];case 16:uniqueRow=_state.sent();if(!uniqueRow)return[3,18];return[4,this.createFixtureRecord(entity1,uniqueRow,{singleRecord:true,_db:targetDB})];case 17:_ref1=_sliced_to_array.apply(void 0,[_state.sent(),1]),record1=_ref1[0];fixture.unique=record1;_state.label=18;case 18:_iteratorAbruptCompletion=false;return[3,11];case 19:return[3,26];case 20:err1=_state.sent();_didIteratorError1=true;_iteratorError1=err1;return[3,26];case 21:_state.trys.push([21,,24,25]);if(!(_iteratorAbruptCompletion&&_iterator1.return!=null))return[3,23];return[4,_iterator1.return()];case 22:_state.sent();_state.label=23;case 23:return[3,25];case 24:if(_didIteratorError1){throw _iteratorError1}return[7];case 25:return[7];case 26:return[2,_lodash.default.uniqBy(fixtures,function(f){return f.fixtureId})]}})}).call(this)}},{key:"createFixtureRecord",value:function createFixtureRecord(entity,row,options){return _async_to_generator(function(){var records,visitedEntities,create;return _ts_generator(this,function(_state){switch(_state.label){case 0:records=[];visitedEntities=new Set;create=function(entity,row){return _async_to_generator(function(){var fixtureId,record,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_iterator,_step,prop,_options__db,db,relatedEntity,throughTable,fromColumn,toColumn,relatedIds,relatedEntity1,relatedIds1,relatedEntity2,relatedProp,relatedRow,relatedId,relatedEntity3,relatedRow1,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:fixtureId="".concat(entity.id,"#").concat(row.id);if(visitedEntities.has(fixtureId)){return[2]}visitedEntities.add(fixtureId);record={fixtureId:fixtureId,entityId:entity.id,id:row.id,columns:{},fetchedRecords:[],belongsRecords:[]};_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=1;case 1:_state.trys.push([1,14,15,16]);_iterator=entity.props[Symbol.iterator]();_state.label=2;case 2:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,13];prop=_step.value;if((0,_types.isVirtualProp)(prop)){return[3,12]}record.columns[prop.name]={prop:prop,value:row[prop.name]};db=(_options__db=options===null||options===void 0?void 0:options._db)!==null&&_options__db!==void 0?_options__db:_basemodel.BaseModel.getDB("w");if(!(0,_types.isManyToManyRelationProp)(prop))return[3,4];relatedEntity=_entitymanager.EntityManager.get(prop.with);throughTable=prop.joinTable;fromColumn="".concat(_inflection.default.singularize(entity.table),"_id");toColumn="".concat(_inflection.default.singularize(relatedEntity.table),"_id");return[4,db(throughTable).where(fromColumn,row.id).pluck(toColumn)];case 3:relatedIds=_state.sent();record.columns[prop.name].value=relatedIds;return[3,12];case 4:if(!(0,_types.isHasManyRelationProp)(prop))return[3,6];relatedEntity1=_entitymanager.EntityManager.get(prop.with);return[4,db(relatedEntity1.table).where(prop.joinColumn,row.id).pluck("id")];case 5:relatedIds1=_state.sent();record.columns[prop.name].value=relatedIds1;return[3,12];case 6:if(!((0,_types.isOneToOneRelationProp)(prop)&&!prop.hasJoinColumn))return[3,9];relatedEntity2=_entitymanager.EntityManager.get(prop.with);relatedProp=relatedEntity2.props.find(function(p){return(0,_types.isRelationProp)(p)&&p.with===entity.id});if(!relatedProp)return[3,8];return[4,db(relatedEntity2.table).where("id",row.id).first()];case 7:relatedRow=_state.sent();record.columns[prop.name].value=relatedRow===null||relatedRow===void 0?void 0:relatedRow.id;_state.label=8;case 8:return[3,12];case 9:if(!(0,_types.isRelationProp)(prop))return[3,12];relatedId=row["".concat(prop.name,"_id")];record.columns[prop.name].value=relatedId;if(relatedId){record.belongsRecords.push("".concat(prop.with,"#").concat(relatedId))}if(!(!(options===null||options===void 0?void 0:options.singleRecord)&&relatedId))return[3,12];relatedEntity3=_entitymanager.EntityManager.get(prop.with);return[4,db(relatedEntity3.table).where("id",relatedId).first()];case 10:relatedRow1=_state.sent();if(!relatedRow1)return[3,12];return[4,create(relatedEntity3,relatedRow1)];case 11:_state.sent();_state.label=12;case 12:_iteratorNormalCompletion=true;return[3,2];case 13:return[3,16];case 14:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,16];case 15:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 16:records.push(record);return[2]}})})()};return[4,create(entity,row)];case 1:_state.sent();return[2,records]}})})()}},{key:"insertFixtures",value:function insertFixtures(dbName,_fixtures){return _async_to_generator(function(){var _this,fixtures,insertionOrder,db,records,_iteratorAbruptCompletion,_didIteratorError,_iteratorError,_iterator,_step,_value,r,entity,record,err1;return _ts_generator(this,function(_state){switch(_state.label){case 0:_this=this;fixtures=_lodash.default.uniqBy(_fixtures,function(f){return f.fixtureId});this.relationGraph.buildGraph(fixtures);insertionOrder=this.relationGraph.getInsertionOrder();db=(0,_knex.default)(_api.Sonamu.dbConfig[dbName]);return[4,db.transaction(function(trx){return _async_to_generator(function(){var _iteratorNormalCompletion,_didIteratorError,_iteratorError,_this,_loop,_iterator,_step,err,_iteratorNormalCompletion1,_didIteratorError1,_iteratorError1,_this1,_loop1,_iterator1,_step1,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:return[4,trx.raw("SET FOREIGN_KEY_CHECKS = 0")];case 1:_state.sent();_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=2;case 2:_state.trys.push([2,7,8,9]);_loop=function(){var fixtureId,fixture,result;return _ts_generator(this,function(_state){switch(_state.label){case 0:fixtureId=_step.value;fixture=fixtures.find(function(f){return f.fixtureId===fixtureId});return[4,_this.insertFixture(trx,fixture)];case 1:result=_state.sent();if(result.id!==fixture.id){console.log(_chalk.default.yellow("Unique constraint violation: ".concat(fixture.entityId,"#").concat(fixture.id," -> ").concat(fixture.entityId,"#").concat(result.id)));fixtures.forEach(function(f){Object.values(f.columns).forEach(function(column){if(column.prop.type==="relation"&&column.prop.with===result.entityId&&column.value===fixture.id){column.value=result.id}})});fixture.id=result.id}return[2]}})};_iterator=insertionOrder[Symbol.iterator]();_state.label=3;case 3:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,6];_this=this;return[5,_ts_values(_loop())];case 4:_state.sent();_state.label=5;case 5:_iteratorNormalCompletion=true;return[3,3];case 6:return[3,9];case 7:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,9];case 8:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 9:_iteratorNormalCompletion1=true,_didIteratorError1=false,_iteratorError1=undefined;_state.label=10;case 10:_state.trys.push([10,15,16,17]);_loop1=function(){var fixtureId,fixture;return _ts_generator(this,function(_state){switch(_state.label){case 0:fixtureId=_step1.value;fixture=fixtures.find(function(f){return f.fixtureId===fixtureId});return[4,_this1.handleManyToManyRelations(trx,fixture,fixtures)];case 1:_state.sent();return[2]}})};_iterator1=insertionOrder[Symbol.iterator]();_state.label=11;case 11:if(!!(_iteratorNormalCompletion1=(_step1=_iterator1.next()).done))return[3,14];_this1=this;return[5,_ts_values(_loop1())];case 12:_state.sent();_state.label=13;case 13:_iteratorNormalCompletion1=true;return[3,11];case 14:return[3,17];case 15:err=_state.sent();_didIteratorError1=true;_iteratorError1=err;return[3,17];case 16:try{if(!_iteratorNormalCompletion1&&_iterator1.return!=null){_iterator1.return()}}finally{if(_didIteratorError1){throw _iteratorError1}}return[7];case 17:return[4,trx.raw("SET FOREIGN_KEY_CHECKS = 1")];case 18:_state.sent();return[2]}})}).call(_this)})];case 1:_state.sent();records=[];_iteratorAbruptCompletion=false,_didIteratorError=false;_state.label=2;case 2:_state.trys.push([2,8,9,14]);_iterator=_async_iterator(fixtures);_state.label=3;case 3:return[4,_iterator.next()];case 4:if(!(_iteratorAbruptCompletion=!(_step=_state.sent()).done))return[3,7];_value=_step.value;r=_value;entity=_entitymanager.EntityManager.get(r.entityId);return[4,db(entity.table).where("id",r.id).first()];case 5:record=_state.sent();records.push({entityId:r.entityId,data:record});_state.label=6;case 6:_iteratorAbruptCompletion=false;return[3,3];case 7:return[3,14];case 8:err1=_state.sent();_didIteratorError=true;_iteratorError=err1;return[3,14];case 9:_state.trys.push([9,,12,13]);if(!(_iteratorAbruptCompletion&&_iterator.return!=null))return[3,11];return[4,_iterator.return()];case 10:_state.sent();_state.label=11;case 11:return[3,13];case 12:if(_didIteratorError){throw _iteratorError}return[7];case 13:return[7];case 14:return[2,_lodash.default.uniqBy(records,function(r){return"".concat(r.entityId,"#").concat(r.data.id)})]}})}).call(this)}},{key:"prepareInsertData",value:function prepareInsertData(fixture){var insertData={};var _iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;try{for(var _iterator=Object.entries(fixture.columns)[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var _step_value=_sliced_to_array(_step.value,2),propName=_step_value[0],column=_step_value[1];if((0,_types.isVirtualProp)(column.prop)){continue}var prop=column.prop;if(!(0,_types.isRelationProp)(prop)){if(prop.type==="json"){insertData[propName]=JSON.stringify(column.value)}else if(prop.type==="timestamp"||prop.type==="datetime"){insertData[propName]=new Date(column.value)}else{insertData[propName]=column.value}}else if((0,_types.isBelongsToOneRelationProp)(prop)||(0,_types.isOneToOneRelationProp)(prop)&&prop.hasJoinColumn){insertData["".concat(propName,"_id")]=column.value}}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}return insertData}},{key:"insertFixture",value:function insertFixture(db,fixture){return _async_to_generator(function(){var insertData,entity,uniqueFound,found,q,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:insertData=this.prepareInsertData(fixture);entity=_entitymanager.EntityManager.get(fixture.entityId);_state.label=1;case 1:_state.trys.push([1,5,,6]);return[4,this.checkUniqueViolation(db,entity,fixture)];case 2:uniqueFound=_state.sent();if(uniqueFound){return[2,{entityId:fixture.entityId,id:uniqueFound.id}]}return[4,db(entity.table).where("id",fixture.id).first()];case 3:found=_state.sent();if(found&&!fixture.override){return[2,{entityId:fixture.entityId,id:found.id}]}q=db.insert(insertData).into(entity.table);return[4,q.onDuplicateUpdate.apply(q,Object.keys(insertData))];case 4:_state.sent();return[2,{entityId:fixture.entityId,id:fixture.id}];case 5:err=_state.sent();console.log(err);throw err;case 6:return[2]}})}).call(this)}},{key:"handleManyToManyRelations",value:function handleManyToManyRelations(db,fixture,fixtures){return _async_to_generator(function(){var _iteratorNormalCompletion,_didIteratorError,_iteratorError,_loop,_iterator,_step,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=1;case 1:_state.trys.push([1,6,7,8]);_loop=function(){var _step_value,column,prop,joinTable,relatedIds,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_loop,_iterator,_step1,err;return _ts_generator(this,function(_state){switch(_state.label){case 0:_step_value=_sliced_to_array(_step.value,2),column=_step_value[1];prop=column.prop;if(!(0,_types.isManyToManyRelationProp)(prop))return[3,8];joinTable=prop.joinTable;relatedIds=column.value;_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;_state.label=1;case 1:_state.trys.push([1,6,7,8]);_loop=function(){var relatedId,entity,relatedEntity,_obj,_ref,found,_obj1,newIds;return _ts_generator(this,function(_state){switch(_state.label){case 0:relatedId=_step1.value;if(!fixtures.find(function(f){return f.fixtureId==="".concat(prop.with,"#").concat(relatedId)})){return[2,"continue"]}entity=_entitymanager.EntityManager.get(fixture.entityId);relatedEntity=_entitymanager.EntityManager.get(prop.with);if(!entity||!relatedEntity){throw new Error("Entity not found: ".concat(fixture.entityId,", ").concat(prop.with))}return[4,db(joinTable).where((_obj={},_define_property(_obj,"".concat(_inflection.default.singularize(entity.table),"_id"),fixture.id),_define_property(_obj,"".concat(_inflection.default.singularize(relatedEntity.table),"_id"),relatedId),_obj)).limit(1)];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),found=_ref[0];if(found){return[2,"continue"]}return[4,db(joinTable).insert((_obj1={},_define_property(_obj1,"".concat(_inflection.default.singularize(entity.table),"_id"),fixture.id),_define_property(_obj1,"".concat(_inflection.default.singularize(relatedEntity.table),"_id"),relatedId),_obj1))];case 2:newIds=_state.sent();console.log(_chalk.default.green("Inserted into ".concat(joinTable,": ").concat(entity.table,"(").concat(fixture.id,") - ").concat(relatedEntity.table,"(").concat(relatedId,") ID: ").concat(newIds)));return[2]}})};_iterator=relatedIds[Symbol.iterator]();_state.label=2;case 2:if(!!(_iteratorNormalCompletion=(_step1=_iterator.next()).done))return[3,5];return[5,_ts_values(_loop())];case 3:_state.sent();_state.label=4;case 4:_iteratorNormalCompletion=true;return[3,2];case 5:return[3,8];case 6:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,8];case 7:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 8:return[2]}})};_iterator=Object.entries(fixture.columns)[Symbol.iterator]();_state.label=2;case 2:if(!!(_iteratorNormalCompletion=(_step=_iterator.next()).done))return[3,5];return[5,_ts_values(_loop())];case 3:_state.sent();_state.label=4;case 4:_iteratorNormalCompletion=true;return[3,2];case 5:return[3,8];case 6:err=_state.sent();_didIteratorError=true;_iteratorError=err;return[3,8];case 7:try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}return[7];case 8:return[2]}})})()}},{key:"addFixtureLoader",value:function addFixtureLoader(code){return _async_to_generator(function(){var path,content,fixtureLoaderStart,fixtureLoaderEnd,newContent;return _ts_generator(this,function(_state){path=_api.Sonamu.apiRootPath+"/src/testing/fixture.ts";content=(0,_fs.readFileSync)(path).toString();fixtureLoaderStart=content.indexOf("const fixtureLoader = {");fixtureLoaderEnd=content.indexOf("};",fixtureLoaderStart);if(fixtureLoaderStart!==-1&&fixtureLoaderEnd!==-1){newContent=content.slice(0,fixtureLoaderEnd)+" "+code+"\n"+content.slice(fixtureLoaderEnd);(0,_fs.writeFileSync)(path,newContent)}else{throw new Error("Failed to find fixtureLoader in fixture.ts")}return[2]})})()}},{key:"checkUniqueViolation",value:function checkUniqueViolation(db,entity,fixture){return _async_to_generator(function(){var _uniqueIndexes,uniqueIndexes,uniqueQuery,_iteratorNormalCompletion,_didIteratorError,_iteratorError,_loop,_iterator,_step,_ref,uniqueFound;return _ts_generator(this,function(_state){switch(_state.label){case 0:_uniqueIndexes=entity.indexes.filter(function(i){return i.type==="unique"});uniqueIndexes=_uniqueIndexes.filter(function(index){return index.columns.every(function(column){return!column.startsWith("".concat(entity.table,"__"))})});if(uniqueIndexes.length===0){return[2,null]}uniqueQuery=db(entity.table);_iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;try{_loop=function(){var index=_step.value;var containsNull=index.columns.some(function(column){var field=column.split("_id")[0];return fixture.columns[field].value===null});if(containsNull){return"continue"}uniqueQuery=uniqueQuery.orWhere(function(qb){var _iteratorNormalCompletion=true,_didIteratorError=false,_iteratorError=undefined;try{for(var _iterator=index.columns[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var column=_step.value;var field=column.split("_id")[0];if(Array.isArray(fixture.columns[field].value)){qb.whereIn(column,fixture.columns[field].value)}else{qb.andWhere(column,fixture.columns[field].value)}}}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}})};for(_iterator=uniqueIndexes[Symbol.iterator]();!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true)_loop()}catch(err){_didIteratorError=true;_iteratorError=err}finally{try{if(!_iteratorNormalCompletion&&_iterator.return!=null){_iterator.return()}}finally{if(_didIteratorError){throw _iteratorError}}}return[4,uniqueQuery];case 1:_ref=_sliced_to_array.apply(void 0,[_state.sent(),1]),uniqueFound=_ref[0];return[2,uniqueFound]}})})()}}]);return FixtureManagerClass}();var FixtureManager=new FixtureManagerClass;
|
|
2
2
|
//# sourceMappingURL=fixture-manager.js.map
|