Merge pull request #269 from medusajs/fix/registration-name

fix(medusa): registration names
This commit is contained in:
Sebastian Rindom
2021-06-08 15:08:21 +02:00
committed by GitHub
6 changed files with 86 additions and 83 deletions

View File

@@ -3,6 +3,8 @@ import path from "path"
import { EntitySchema } from "typeorm"
import { asClass, asValue } from "awilix"
import formatRegistrationName from "../utils/format-registration-name"
/**
* Registers all models in the model directory
*/
@@ -34,23 +36,3 @@ export default ({ container }, config = { register: true }) => {
return toReturn
}
function formatRegistrationName(fn) {
const offset = process.env.NODE_ENV === "test" ? 3 : 2
const descriptorIndex = fn.split(".").length - 2
const descriptor = fn.split(".")[descriptorIndex]
const splat = descriptor.split("/")
const rawname = splat[splat.length - 1]
const namespace = splat[splat.length - offset]
const upperNamespace =
namespace.charAt(0).toUpperCase() + namespace.slice(1, -1)
const parts = rawname.split("-").map((n, index) => {
if (index !== 0) {
return n.charAt(0).toUpperCase() + n.slice(1)
}
return n
})
return parts.join("") + upperNamespace
}

View File

@@ -16,6 +16,8 @@ import fs from "fs"
import { asValue, asClass, asFunction, aliasTo } from "awilix"
import { sync as existsSync } from "fs-exists-cached"
import formatRegistrationName from "../utils/format-registration-name"
/**
* Registers all services in the services directory
*/
@@ -360,29 +362,6 @@ function registerModels(pluginDetails, container) {
})
}
/**
* Formats a filename into the correct container resolution name.
* Names are camelCase formatted and namespaced by the folder i.e:
* models/example-person -> examplePersonModel
* @param {string} fn - the full path of the file
* @return {string} the formatted name
*/
function formatRegistrationName(fn) {
const descriptor = fn.split(".")[0]
const splat = descriptor.split("/")
const rawname = splat[splat.length - 1]
const namespace = splat[splat.length - 2]
const upperNamespace =
namespace.charAt(0).toUpperCase() + namespace.slice(1, -1)
const parts = rawname.split("-").map((n, index) => {
if (index !== 0) {
return n.charAt(0).toUpperCase() + n.slice(1)
}
return n
})
return parts.join("") + upperNamespace
}
// TODO: Create unique id for each plugin
function createPluginId(name) {
return name

View File

@@ -2,6 +2,8 @@ import glob from "glob"
import path from "path"
import { Lifetime, asClass, asValue } from "awilix"
import formatRegistrationName from "../utils/format-registration-name"
/**
* Registers all models in the model directory
*/
@@ -23,23 +25,3 @@ export default ({ container }) => {
})
})
}
function formatRegistrationName(fn) {
const offset = process.env.NODE_ENV === "test" ? 3 : 2
const descriptorIndex = fn.split(".").length - 2
const descriptor = fn.split(".")[descriptorIndex]
const splat = descriptor.split("/")
const rawname = splat[splat.length - 1]
const namespace = splat[splat.length - offset]
const upperNamespace = "Repository"
// namespace.charAt(0).toUpperCase() + namespace.slice(1, -1)
const parts = rawname.split("-").map((n, index) => {
if (index !== 0) {
return n.charAt(0).toUpperCase() + n.slice(1)
}
return n
})
return parts.join("") + upperNamespace
}

View File

@@ -3,6 +3,8 @@ import glob from "glob"
import path from "path"
import { Lifetime, asFunction } from "awilix"
import formatRegistrationName from "../utils/format-registration-name"
/**
* Registers all services in the services directory
*/
@@ -23,23 +25,3 @@ export default ({ container, configModule }) => {
})
})
}
function formatRegistrationName(fn) {
const offset = process.env.NODE_ENV === "test" ? 3 : 2
const descriptorIndex = fn.split(".").length - 2
const descriptor = fn.split(".")[descriptorIndex]
const splat = descriptor.split("/")
const rawname = splat[splat.length - 1]
const namespace = splat[splat.length - offset]
const upperNamespace =
namespace.charAt(0).toUpperCase() + namespace.slice(1, -1)
const parts = rawname.split("-").map((n, index) => {
if (index !== 0) {
return n.charAt(0).toUpperCase() + n.slice(1)
}
return n
})
return parts.join("") + upperNamespace
}

View File

@@ -0,0 +1,34 @@
import path from "path"
import formatRegistrationName from "../format-registration-name"
describe("formatRegistrationName", () => {
const tests = [
[["medusa-test-dir", "dist", "services", "my-test.js"], "myTestService"],
[["medusa-test-dir", "dist", "services", "my.js"], "myService"],
[["services", "my-quite-long-file.js"], "myQuiteLongFileService"],
[
["/", "Users", "seb", "com.medusa.js", "services", "dot.js"],
"dotService",
],
[
["/", "Users", "seb.rin", "com.medusa.js", "services", "dot.js"],
"dotService",
],
[
["/", "Users", "seb.rin", "com.medusa.js", "repositories", "dot.js"],
"dotRepository",
],
[
["/", "Users", "seb.rin", "com.medusa.js", "models", "dot.js"],
"dotModel",
],
[["C:", "server", "services", "dot.js"], "dotService"],
]
test.each(
tests.map(([pathParts, expected]) => [path.join(...pathParts), expected])
)("Service %s -> %s", (fn, expected) => {
const res = formatRegistrationName(fn)
expect(res).toEqual(expected)
})
})

View File

@@ -0,0 +1,44 @@
import path from "path"
/**
* Formats a filename into the correct container resolution name.
* Names are camelCase formatted and namespaced by the folder i.e:
* models/example-person -> examplePersonModel
* @param {string} fn - the full path of the file
* @return {string} the formatted name
*/
function formatRegistrationName(fn) {
const parsed = path.parse(fn)
const parsedDir = path.parse(parsed.dir)
const rawname = parsed.name
let namespace = parsedDir.name
if (namespace.startsWith("__")) {
const parsedCoreDir = path.parse(parsedDir.dir)
namespace = parsedCoreDir.name
}
switch (namespace) {
// We strip the last character when adding the type of registration
// this is a trick for plural "ies"
case "repositories":
namespace = "repositorys"
break
default:
break
}
const upperNamespace =
namespace.charAt(0).toUpperCase() + namespace.slice(1, -1)
const parts = rawname.split("-").map((n, index) => {
if (index !== 0) {
return n.charAt(0).toUpperCase() + n.slice(1)
}
return n
})
return parts.join("") + upperNamespace
}
export default formatRegistrationName