@contember/schema-utils 2.1.0-alpha.9 → 2.1.0-beta.2
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/CLAUDE.md +30 -0
- package/dist/development/index.cjs.map +1 -1
- package/dist/development/index.js.map +1 -1
- package/dist/development/src/acl/AllowAllPermissionFactory.cjs.map +1 -1
- package/dist/development/src/acl/AllowAllPermissionFactory.js.map +1 -1
- package/dist/development/src/acl/PredicateDefinitionProcessor.cjs +1 -3
- package/dist/development/src/acl/PredicateDefinitionProcessor.cjs.map +1 -1
- package/dist/development/src/acl/PredicateDefinitionProcessor.js +1 -3
- package/dist/development/src/acl/PredicateDefinitionProcessor.js.map +1 -1
- package/dist/development/src/acl/schemaUtils.cjs.map +1 -1
- package/dist/development/src/acl/schemaUtils.js.map +1 -1
- package/dist/development/src/dataUtils.cjs.map +1 -1
- package/dist/development/src/dataUtils.js.map +1 -1
- package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.cjs +8 -7
- package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.cjs.map +1 -1
- package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.js +8 -7
- package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.js.map +1 -1
- package/dist/development/src/definition-generator/DefinitionCodeGenerator.cjs.map +1 -1
- package/dist/development/src/definition-generator/DefinitionCodeGenerator.js.map +1 -1
- package/dist/development/src/definition-generator/DefinitionNamingConventions.cjs +50 -1
- package/dist/development/src/definition-generator/DefinitionNamingConventions.cjs.map +1 -1
- package/dist/development/src/definition-generator/DefinitionNamingConventions.js +50 -1
- package/dist/development/src/definition-generator/DefinitionNamingConventions.js.map +1 -1
- package/dist/development/src/definition-generator/TsDefinitionGenerator.cjs.map +1 -1
- package/dist/development/src/definition-generator/TsDefinitionGenerator.js.map +1 -1
- package/dist/development/src/lax/LaxSchemaConverter.cjs.map +1 -1
- package/dist/development/src/lax/LaxSchemaConverter.js.map +1 -1
- package/dist/development/src/lax/schema.cjs.map +1 -1
- package/dist/development/src/lax/schema.js.map +1 -1
- package/dist/development/src/model/NamingConventions.cjs.map +1 -1
- package/dist/development/src/model/NamingConventions.js.map +1 -1
- package/dist/development/src/model/modelUtils.cjs +7 -9
- package/dist/development/src/model/modelUtils.cjs.map +1 -1
- package/dist/development/src/model/modelUtils.js +7 -9
- package/dist/development/src/model/modelUtils.js.map +1 -1
- package/dist/development/src/model/resolveDefaultColumnType.cjs.map +1 -1
- package/dist/development/src/model/resolveDefaultColumnType.js.map +1 -1
- package/dist/development/src/schemaChecksum.cjs.map +1 -1
- package/dist/development/src/schemaChecksum.js.map +1 -1
- package/dist/development/src/schemaFilter.cjs.map +1 -1
- package/dist/development/src/schemaFilter.js.map +1 -1
- package/dist/development/src/schemaNormalizer.cjs.map +1 -1
- package/dist/development/src/schemaNormalizer.js.map +1 -1
- package/dist/development/src/type-schema/acl.cjs +15 -12
- package/dist/development/src/type-schema/acl.cjs.map +1 -1
- package/dist/development/src/type-schema/acl.js +15 -12
- package/dist/development/src/type-schema/acl.js.map +1 -1
- package/dist/development/src/type-schema/actions.cjs +2 -1
- package/dist/development/src/type-schema/actions.cjs.map +1 -1
- package/dist/development/src/type-schema/actions.js +2 -1
- package/dist/development/src/type-schema/actions.js.map +1 -1
- package/dist/development/src/type-schema/condition.cjs +4 -1
- package/dist/development/src/type-schema/condition.cjs.map +1 -1
- package/dist/development/src/type-schema/condition.js +4 -1
- package/dist/development/src/type-schema/condition.js.map +1 -1
- package/dist/development/src/type-schema/model.cjs +10 -5
- package/dist/development/src/type-schema/model.cjs.map +1 -1
- package/dist/development/src/type-schema/model.js +10 -5
- package/dist/development/src/type-schema/model.js.map +1 -1
- package/dist/development/src/type-schema/settings.cjs +3 -0
- package/dist/development/src/type-schema/settings.cjs.map +1 -1
- package/dist/development/src/type-schema/settings.js +3 -0
- package/dist/development/src/type-schema/settings.js.map +1 -1
- package/dist/development/src/type-schema/validation.cjs.map +1 -1
- package/dist/development/src/type-schema/validation.js.map +1 -1
- package/dist/development/src/type-schema/where.cjs +11 -9
- package/dist/development/src/type-schema/where.cjs.map +1 -1
- package/dist/development/src/type-schema/where.js +11 -9
- package/dist/development/src/type-schema/where.js.map +1 -1
- package/dist/development/src/utils/assertNever.cjs.map +1 -1
- package/dist/development/src/utils/assertNever.js.map +1 -1
- package/dist/development/src/utils/deepCompare.cjs +1 -1
- package/dist/development/src/utils/deepCompare.cjs.map +1 -1
- package/dist/development/src/utils/deepCompare.js +1 -1
- package/dist/development/src/utils/deepCompare.js.map +1 -1
- package/dist/development/src/utils/isIt.cjs.map +1 -1
- package/dist/development/src/utils/isIt.js.map +1 -1
- package/dist/development/src/utils/printJsValue.cjs.map +1 -1
- package/dist/development/src/utils/printJsValue.js.map +1 -1
- package/dist/development/src/validation/AclValidator.cjs.map +1 -1
- package/dist/development/src/validation/AclValidator.js.map +1 -1
- package/dist/development/src/validation/ActionsValidator.cjs.map +1 -1
- package/dist/development/src/validation/ActionsValidator.js.map +1 -1
- package/dist/development/src/validation/MembershipResolver.cjs +10 -7
- package/dist/development/src/validation/MembershipResolver.cjs.map +1 -1
- package/dist/development/src/validation/MembershipResolver.js +10 -7
- package/dist/development/src/validation/MembershipResolver.js.map +1 -1
- package/dist/development/src/validation/ModelValidator.cjs +20 -5
- package/dist/development/src/validation/ModelValidator.cjs.map +1 -1
- package/dist/development/src/validation/ModelValidator.js +20 -5
- package/dist/development/src/validation/ModelValidator.js.map +1 -1
- package/dist/development/src/validation/SchemaValidator.cjs.map +1 -1
- package/dist/development/src/validation/SchemaValidator.js.map +1 -1
- package/dist/development/src/validation/ValidationValidator.cjs.map +1 -1
- package/dist/development/src/validation/ValidationValidator.js.map +1 -1
- package/dist/development/src/validation/errors.cjs.map +1 -1
- package/dist/development/src/validation/errors.js.map +1 -1
- package/dist/production/index.cjs.map +1 -1
- package/dist/production/index.js.map +1 -1
- package/dist/production/src/acl/AllowAllPermissionFactory.cjs.map +1 -1
- package/dist/production/src/acl/AllowAllPermissionFactory.js.map +1 -1
- package/dist/production/src/acl/PredicateDefinitionProcessor.cjs +1 -3
- package/dist/production/src/acl/PredicateDefinitionProcessor.cjs.map +1 -1
- package/dist/production/src/acl/PredicateDefinitionProcessor.js +1 -3
- package/dist/production/src/acl/PredicateDefinitionProcessor.js.map +1 -1
- package/dist/production/src/acl/schemaUtils.cjs.map +1 -1
- package/dist/production/src/acl/schemaUtils.js.map +1 -1
- package/dist/production/src/dataUtils.cjs.map +1 -1
- package/dist/production/src/dataUtils.js.map +1 -1
- package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.cjs +8 -7
- package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.cjs.map +1 -1
- package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.js +8 -7
- package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.js.map +1 -1
- package/dist/production/src/definition-generator/DefinitionCodeGenerator.cjs.map +1 -1
- package/dist/production/src/definition-generator/DefinitionCodeGenerator.js.map +1 -1
- package/dist/production/src/definition-generator/DefinitionNamingConventions.cjs +50 -1
- package/dist/production/src/definition-generator/DefinitionNamingConventions.cjs.map +1 -1
- package/dist/production/src/definition-generator/DefinitionNamingConventions.js +50 -1
- package/dist/production/src/definition-generator/DefinitionNamingConventions.js.map +1 -1
- package/dist/production/src/definition-generator/TsDefinitionGenerator.cjs.map +1 -1
- package/dist/production/src/definition-generator/TsDefinitionGenerator.js.map +1 -1
- package/dist/production/src/lax/LaxSchemaConverter.cjs.map +1 -1
- package/dist/production/src/lax/LaxSchemaConverter.js.map +1 -1
- package/dist/production/src/lax/schema.cjs.map +1 -1
- package/dist/production/src/lax/schema.js.map +1 -1
- package/dist/production/src/model/NamingConventions.cjs.map +1 -1
- package/dist/production/src/model/NamingConventions.js.map +1 -1
- package/dist/production/src/model/modelUtils.cjs +7 -9
- package/dist/production/src/model/modelUtils.cjs.map +1 -1
- package/dist/production/src/model/modelUtils.js +7 -9
- package/dist/production/src/model/modelUtils.js.map +1 -1
- package/dist/production/src/model/resolveDefaultColumnType.cjs.map +1 -1
- package/dist/production/src/model/resolveDefaultColumnType.js.map +1 -1
- package/dist/production/src/schemaChecksum.cjs.map +1 -1
- package/dist/production/src/schemaChecksum.js.map +1 -1
- package/dist/production/src/schemaFilter.cjs.map +1 -1
- package/dist/production/src/schemaFilter.js.map +1 -1
- package/dist/production/src/schemaNormalizer.cjs.map +1 -1
- package/dist/production/src/schemaNormalizer.js.map +1 -1
- package/dist/production/src/type-schema/acl.cjs +15 -12
- package/dist/production/src/type-schema/acl.cjs.map +1 -1
- package/dist/production/src/type-schema/acl.js +15 -12
- package/dist/production/src/type-schema/acl.js.map +1 -1
- package/dist/production/src/type-schema/actions.cjs +2 -1
- package/dist/production/src/type-schema/actions.cjs.map +1 -1
- package/dist/production/src/type-schema/actions.js +2 -1
- package/dist/production/src/type-schema/actions.js.map +1 -1
- package/dist/production/src/type-schema/condition.cjs +4 -1
- package/dist/production/src/type-schema/condition.cjs.map +1 -1
- package/dist/production/src/type-schema/condition.js +4 -1
- package/dist/production/src/type-schema/condition.js.map +1 -1
- package/dist/production/src/type-schema/model.cjs +10 -5
- package/dist/production/src/type-schema/model.cjs.map +1 -1
- package/dist/production/src/type-schema/model.js +10 -5
- package/dist/production/src/type-schema/model.js.map +1 -1
- package/dist/production/src/type-schema/settings.cjs +3 -0
- package/dist/production/src/type-schema/settings.cjs.map +1 -1
- package/dist/production/src/type-schema/settings.js +3 -0
- package/dist/production/src/type-schema/settings.js.map +1 -1
- package/dist/production/src/type-schema/validation.cjs.map +1 -1
- package/dist/production/src/type-schema/validation.js.map +1 -1
- package/dist/production/src/type-schema/where.cjs +11 -9
- package/dist/production/src/type-schema/where.cjs.map +1 -1
- package/dist/production/src/type-schema/where.js +11 -9
- package/dist/production/src/type-schema/where.js.map +1 -1
- package/dist/production/src/utils/assertNever.cjs.map +1 -1
- package/dist/production/src/utils/assertNever.js.map +1 -1
- package/dist/production/src/utils/deepCompare.cjs +1 -1
- package/dist/production/src/utils/deepCompare.cjs.map +1 -1
- package/dist/production/src/utils/deepCompare.js +1 -1
- package/dist/production/src/utils/deepCompare.js.map +1 -1
- package/dist/production/src/utils/isIt.cjs.map +1 -1
- package/dist/production/src/utils/isIt.js.map +1 -1
- package/dist/production/src/utils/printJsValue.cjs.map +1 -1
- package/dist/production/src/utils/printJsValue.js.map +1 -1
- package/dist/production/src/validation/AclValidator.cjs.map +1 -1
- package/dist/production/src/validation/AclValidator.js.map +1 -1
- package/dist/production/src/validation/ActionsValidator.cjs.map +1 -1
- package/dist/production/src/validation/ActionsValidator.js.map +1 -1
- package/dist/production/src/validation/MembershipResolver.cjs +10 -7
- package/dist/production/src/validation/MembershipResolver.cjs.map +1 -1
- package/dist/production/src/validation/MembershipResolver.js +10 -7
- package/dist/production/src/validation/MembershipResolver.js.map +1 -1
- package/dist/production/src/validation/ModelValidator.cjs +20 -5
- package/dist/production/src/validation/ModelValidator.cjs.map +1 -1
- package/dist/production/src/validation/ModelValidator.js +20 -5
- package/dist/production/src/validation/ModelValidator.js.map +1 -1
- package/dist/production/src/validation/SchemaValidator.cjs.map +1 -1
- package/dist/production/src/validation/SchemaValidator.js.map +1 -1
- package/dist/production/src/validation/ValidationValidator.cjs.map +1 -1
- package/dist/production/src/validation/ValidationValidator.js.map +1 -1
- package/dist/production/src/validation/errors.cjs.map +1 -1
- package/dist/production/src/validation/errors.js.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/dist/types/acl/PredicateDefinitionProcessor.d.ts.map +1 -1
- package/dist/types/definition-generator/AclDefinitionCodeGenerator.d.ts.map +1 -1
- package/dist/types/definition-generator/DefinitionCodeGenerator.d.ts.map +1 -1
- package/dist/types/definition-generator/DefinitionNamingConventions.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/lax/LaxSchemaConverter.d.ts.map +1 -1
- package/dist/types/lax/schema.d.ts.map +1 -1
- package/dist/types/model/modelUtils.d.ts.map +1 -1
- package/dist/types/schemaChecksum.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/dist/types/type-schema/acl.d.ts.map +1 -1
- package/dist/types/type-schema/actions.d.ts +1 -0
- package/dist/types/type-schema/actions.d.ts.map +1 -1
- package/dist/types/type-schema/model.d.ts.map +1 -1
- package/dist/types/type-schema/settings.d.ts +11 -0
- package/dist/types/type-schema/settings.d.ts.map +1 -1
- package/dist/types/type-schema/validation.d.ts.map +1 -1
- package/dist/types/type-schema/where.d.ts.map +1 -1
- package/dist/types/utils/printJsValue.d.ts.map +1 -1
- package/dist/types/validation/AclValidator.d.ts.map +1 -1
- package/dist/types/validation/ActionsValidator.d.ts.map +1 -1
- package/dist/types/validation/MembershipResolver.d.ts +1 -1
- package/dist/types/validation/MembershipResolver.d.ts.map +1 -1
- package/dist/types/validation/ModelValidator.d.ts.map +1 -1
- package/dist/types/validation/SchemaValidator.d.ts.map +1 -1
- package/dist/types/validation/ValidationValidator.d.ts.map +1 -1
- package/dist/types/validation/errors.d.ts.map +1 -1
- package/package.json +11 -6
- package/src/acl/AllowAllPermissionFactory.ts +1 -1
- package/src/acl/PredicateDefinitionProcessor.ts +5 -7
- package/src/dataUtils.ts +1 -1
- package/src/definition-generator/AclDefinitionCodeGenerator.ts +7 -8
- package/src/definition-generator/DefinitionCodeGenerator.ts +8 -14
- package/src/definition-generator/DefinitionNamingConventions.ts +50 -1
- package/src/index.ts +2 -2
- package/src/lax/LaxSchemaConverter.ts +0 -4
- package/src/lax/schema.ts +4 -1
- package/src/model/modelUtils.ts +2 -4
- package/src/schemaChecksum.ts +0 -1
- package/src/schemaFilter.ts +1 -1
- package/src/type-schema/acl.ts +15 -12
- package/src/type-schema/actions.ts +1 -2
- package/src/type-schema/condition.ts +25 -20
- package/src/type-schema/model.ts +12 -8
- package/src/type-schema/settings.ts +3 -0
- package/src/type-schema/validation.ts +5 -4
- package/src/type-schema/where.ts +11 -9
- package/src/utils/deepCompare.ts +1 -1
- package/src/utils/printJsValue.ts +23 -25
- package/src/validation/AclValidator.ts +0 -2
- package/src/validation/ActionsValidator.ts +7 -7
- package/src/validation/MembershipResolver.ts +10 -9
- package/src/validation/ModelValidator.ts +43 -32
- package/src/validation/SchemaValidator.ts +7 -6
- package/src/validation/ValidationValidator.ts +1 -3
- package/src/validation/errors.ts +0 -3
- package/tests/cases/unit/conditionSchema.test.ts +1 -2
- package/tests/cases/unit/deepCompare.test.ts +2 -3
- package/tests/cases/unit/laxSchemaConverter.test.ts +0 -4
- package/tests/cases/unit/membershipResolver.test.ts +136 -49
- package/tests/cases/unit/modelSchema.test.ts +4 -4
- package/tests/cases/unit/modelValidator.test.ts +0 -1
- package/tests/cases/unit/printJsvalue.test.ts +11 -7
- package/tests/cases/unit/whereSchema.test.ts +19 -18
- package/tests/cases/unit/schemas/.eslintignore +0 -1
- package/vitest.config.ts +0 -3
|
@@ -14,6 +14,55 @@ class DefinitionNamingConventions {
|
|
|
14
14
|
return this.formatIdentifier(`${id}${role.charAt(0).toUpperCase() + role.slice(1)}Variable`);
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
-
__publicField(DefinitionNamingConventions, "reservedWords", /* @__PURE__ */ new Set([
|
|
17
|
+
__publicField(DefinitionNamingConventions, "reservedWords", /* @__PURE__ */ new Set([
|
|
18
|
+
"do",
|
|
19
|
+
"if",
|
|
20
|
+
"in",
|
|
21
|
+
"for",
|
|
22
|
+
"let",
|
|
23
|
+
"new",
|
|
24
|
+
"try",
|
|
25
|
+
"var",
|
|
26
|
+
"case",
|
|
27
|
+
"else",
|
|
28
|
+
"enum",
|
|
29
|
+
"eval",
|
|
30
|
+
"null",
|
|
31
|
+
"this",
|
|
32
|
+
"true",
|
|
33
|
+
"void",
|
|
34
|
+
"with",
|
|
35
|
+
"await",
|
|
36
|
+
"break",
|
|
37
|
+
"catch",
|
|
38
|
+
"class",
|
|
39
|
+
"const",
|
|
40
|
+
"false",
|
|
41
|
+
"super",
|
|
42
|
+
"throw",
|
|
43
|
+
"while",
|
|
44
|
+
"yield",
|
|
45
|
+
"delete",
|
|
46
|
+
"export",
|
|
47
|
+
"import",
|
|
48
|
+
"public",
|
|
49
|
+
"return",
|
|
50
|
+
"static",
|
|
51
|
+
"switch",
|
|
52
|
+
"typeof",
|
|
53
|
+
"default",
|
|
54
|
+
"extends",
|
|
55
|
+
"finally",
|
|
56
|
+
"package",
|
|
57
|
+
"private",
|
|
58
|
+
"continue",
|
|
59
|
+
"debugger",
|
|
60
|
+
"function",
|
|
61
|
+
"arguments",
|
|
62
|
+
"interface",
|
|
63
|
+
"protected",
|
|
64
|
+
"implements",
|
|
65
|
+
"instanceof"
|
|
66
|
+
]));
|
|
18
67
|
exports.DefinitionNamingConventions = DefinitionNamingConventions;
|
|
19
68
|
//# sourceMappingURL=DefinitionNamingConventions.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefinitionNamingConventions.cjs","sources":["../../../../../packages/schema-utils/src/definition-generator/DefinitionNamingConventions.ts"],"sourcesContent":["export class DefinitionNamingConventions {\n\tprivate static reservedWords = new Set(['do'
|
|
1
|
+
{"version":3,"file":"DefinitionNamingConventions.cjs","sources":["../../../../../packages/schema-utils/src/definition-generator/DefinitionNamingConventions.ts"],"sourcesContent":["export class DefinitionNamingConventions {\n\tprivate static reservedWords = new Set([\n\t\t'do',\n\t\t'if',\n\t\t'in',\n\t\t'for',\n\t\t'let',\n\t\t'new',\n\t\t'try',\n\t\t'var',\n\t\t'case',\n\t\t'else',\n\t\t'enum',\n\t\t'eval',\n\t\t'null',\n\t\t'this',\n\t\t'true',\n\t\t'void',\n\t\t'with',\n\t\t'await',\n\t\t'break',\n\t\t'catch',\n\t\t'class',\n\t\t'const',\n\t\t'false',\n\t\t'super',\n\t\t'throw',\n\t\t'while',\n\t\t'yield',\n\t\t'delete',\n\t\t'export',\n\t\t'import',\n\t\t'public',\n\t\t'return',\n\t\t'static',\n\t\t'switch',\n\t\t'typeof',\n\t\t'default',\n\t\t'extends',\n\t\t'finally',\n\t\t'package',\n\t\t'private',\n\t\t'continue',\n\t\t'debugger',\n\t\t'function',\n\t\t'arguments',\n\t\t'interface',\n\t\t'protected',\n\t\t'implements',\n\t\t'instanceof',\n\t])\n\n\tpublic formatIdentifier(id: string): string {\n\t\t// todo: validate\n\t\treturn id\n\t}\n\n\tpublic roleVarName(id: string): string {\n\t\treturn this.formatIdentifier(`${id}Role`)\n\t}\n\n\tpublic variableVarName(role: string, id: string): string {\n\t\treturn this.formatIdentifier(`${id}${role.charAt(0).toUpperCase() + role.slice(1)}Variable`)\n\t}\n}\n"],"names":[],"mappings":";;;;;AAAO,MAAM,4BAA4B;AAAA,EAoDjC,iBAAiB,IAAoB;AAE3C,WAAO;AAAA,EACR;AAAA,EAEO,YAAY,IAAoB;AACtC,WAAO,KAAK,iBAAiB,GAAG,EAAE,MAAM;AAAA,EACzC;AAAA,EAEO,gBAAgB,MAAc,IAAoB;AACxD,WAAO,KAAK,iBAAiB,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,EAAE,gBAAgB,KAAK,MAAM,CAAC,CAAC,UAAU;AAAA,EAC5F;AACD;AA/DC,cADY,6BACG,iBAAgB,oBAAI,IAAI;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,CAAC,CAAA;;"}
|
|
@@ -12,7 +12,56 @@ class DefinitionNamingConventions {
|
|
|
12
12
|
return this.formatIdentifier(`${id}${role.charAt(0).toUpperCase() + role.slice(1)}Variable`);
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
|
-
__publicField(DefinitionNamingConventions, "reservedWords", /* @__PURE__ */ new Set([
|
|
15
|
+
__publicField(DefinitionNamingConventions, "reservedWords", /* @__PURE__ */ new Set([
|
|
16
|
+
"do",
|
|
17
|
+
"if",
|
|
18
|
+
"in",
|
|
19
|
+
"for",
|
|
20
|
+
"let",
|
|
21
|
+
"new",
|
|
22
|
+
"try",
|
|
23
|
+
"var",
|
|
24
|
+
"case",
|
|
25
|
+
"else",
|
|
26
|
+
"enum",
|
|
27
|
+
"eval",
|
|
28
|
+
"null",
|
|
29
|
+
"this",
|
|
30
|
+
"true",
|
|
31
|
+
"void",
|
|
32
|
+
"with",
|
|
33
|
+
"await",
|
|
34
|
+
"break",
|
|
35
|
+
"catch",
|
|
36
|
+
"class",
|
|
37
|
+
"const",
|
|
38
|
+
"false",
|
|
39
|
+
"super",
|
|
40
|
+
"throw",
|
|
41
|
+
"while",
|
|
42
|
+
"yield",
|
|
43
|
+
"delete",
|
|
44
|
+
"export",
|
|
45
|
+
"import",
|
|
46
|
+
"public",
|
|
47
|
+
"return",
|
|
48
|
+
"static",
|
|
49
|
+
"switch",
|
|
50
|
+
"typeof",
|
|
51
|
+
"default",
|
|
52
|
+
"extends",
|
|
53
|
+
"finally",
|
|
54
|
+
"package",
|
|
55
|
+
"private",
|
|
56
|
+
"continue",
|
|
57
|
+
"debugger",
|
|
58
|
+
"function",
|
|
59
|
+
"arguments",
|
|
60
|
+
"interface",
|
|
61
|
+
"protected",
|
|
62
|
+
"implements",
|
|
63
|
+
"instanceof"
|
|
64
|
+
]));
|
|
16
65
|
export {
|
|
17
66
|
DefinitionNamingConventions
|
|
18
67
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DefinitionNamingConventions.js","sources":["../../../../../packages/schema-utils/src/definition-generator/DefinitionNamingConventions.ts"],"sourcesContent":["export class DefinitionNamingConventions {\n\tprivate static reservedWords = new Set(['do'
|
|
1
|
+
{"version":3,"file":"DefinitionNamingConventions.js","sources":["../../../../../packages/schema-utils/src/definition-generator/DefinitionNamingConventions.ts"],"sourcesContent":["export class DefinitionNamingConventions {\n\tprivate static reservedWords = new Set([\n\t\t'do',\n\t\t'if',\n\t\t'in',\n\t\t'for',\n\t\t'let',\n\t\t'new',\n\t\t'try',\n\t\t'var',\n\t\t'case',\n\t\t'else',\n\t\t'enum',\n\t\t'eval',\n\t\t'null',\n\t\t'this',\n\t\t'true',\n\t\t'void',\n\t\t'with',\n\t\t'await',\n\t\t'break',\n\t\t'catch',\n\t\t'class',\n\t\t'const',\n\t\t'false',\n\t\t'super',\n\t\t'throw',\n\t\t'while',\n\t\t'yield',\n\t\t'delete',\n\t\t'export',\n\t\t'import',\n\t\t'public',\n\t\t'return',\n\t\t'static',\n\t\t'switch',\n\t\t'typeof',\n\t\t'default',\n\t\t'extends',\n\t\t'finally',\n\t\t'package',\n\t\t'private',\n\t\t'continue',\n\t\t'debugger',\n\t\t'function',\n\t\t'arguments',\n\t\t'interface',\n\t\t'protected',\n\t\t'implements',\n\t\t'instanceof',\n\t])\n\n\tpublic formatIdentifier(id: string): string {\n\t\t// todo: validate\n\t\treturn id\n\t}\n\n\tpublic roleVarName(id: string): string {\n\t\treturn this.formatIdentifier(`${id}Role`)\n\t}\n\n\tpublic variableVarName(role: string, id: string): string {\n\t\treturn this.formatIdentifier(`${id}${role.charAt(0).toUpperCase() + role.slice(1)}Variable`)\n\t}\n}\n"],"names":[],"mappings":";;;AAAO,MAAM,4BAA4B;AAAA,EAoDjC,iBAAiB,IAAoB;AAE3C,WAAO;AAAA,EACR;AAAA,EAEO,YAAY,IAAoB;AACtC,WAAO,KAAK,iBAAiB,GAAG,EAAE,MAAM;AAAA,EACzC;AAAA,EAEO,gBAAgB,MAAc,IAAoB;AACxD,WAAO,KAAK,iBAAiB,GAAG,EAAE,GAAG,KAAK,OAAO,CAAC,EAAE,gBAAgB,KAAK,MAAM,CAAC,CAAC,UAAU;AAAA,EAC5F;AACD;AA/DC,cADY,6BACG,iBAAgB,oBAAI,IAAI;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,CAAC,CAAA;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TsDefinitionGenerator.cjs","sources":["../../../../../packages/schema-utils/src/definition-generator/TsDefinitionGenerator.ts"],"sourcesContent":["import { Schema } from '@contember/schema'\nimport { DefaultNamingConventions, NamingConventions } from '../model'\nimport { DefinitionCodeGenerator } from './DefinitionCodeGenerator'\n\n/**\n * @deprecated use {@link DefinitionCodeGenerator}\n */\nexport class TsDefinitionGenerator {\n\tconstructor(\n\t\tprivate readonly schema: Schema,\n\t\tprivate readonly conventions: NamingConventions = new DefaultNamingConventions(),\n\t) {\n\t}\n\n\tpublic generate() {\n\t\tconst generator = new DefinitionCodeGenerator(this.conventions)\n\t\treturn generator.generate(this.schema)\n\t}\n}\n"],"names":["DefaultNamingConventions","DefinitionCodeGenerator"],"mappings":";;;;;AAOO,MAAM,sBAAsB;AAAA,EAClC,YACkB,QACA,cAAiC,IAAIA,
|
|
1
|
+
{"version":3,"file":"TsDefinitionGenerator.cjs","sources":["../../../../../packages/schema-utils/src/definition-generator/TsDefinitionGenerator.ts"],"sourcesContent":["import { Schema } from '@contember/schema'\nimport { DefaultNamingConventions, NamingConventions } from '../model'\nimport { DefinitionCodeGenerator } from './DefinitionCodeGenerator'\n\n/**\n * @deprecated use {@link DefinitionCodeGenerator}\n */\nexport class TsDefinitionGenerator {\n\tconstructor(\n\t\tprivate readonly schema: Schema,\n\t\tprivate readonly conventions: NamingConventions = new DefaultNamingConventions(),\n\t) {\n\t}\n\n\tpublic generate() {\n\t\tconst generator = new DefinitionCodeGenerator(this.conventions)\n\t\treturn generator.generate(this.schema)\n\t}\n}\n"],"names":["DefaultNamingConventions","DefinitionCodeGenerator"],"mappings":";;;;;AAOO,MAAM,sBAAsB;AAAA,EAClC,YACkB,QACA,cAAiC,IAAIA,kBAAAA,4BACrD;AAFgB,SAAA,SAAA;AACA,SAAA,cAAA;AAAA,EAElB;AAAA,EAEO,WAAW;AACjB,UAAM,YAAY,IAAIC,gDAAwB,KAAK,WAAW;AAC9D,WAAO,UAAU,SAAS,KAAK,MAAM;AAAA,EACtC;AACD;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TsDefinitionGenerator.js","sources":["../../../../../packages/schema-utils/src/definition-generator/TsDefinitionGenerator.ts"],"sourcesContent":["import { Schema } from '@contember/schema'\nimport { DefaultNamingConventions, NamingConventions } from '../model'\nimport { DefinitionCodeGenerator } from './DefinitionCodeGenerator'\n\n/**\n * @deprecated use {@link DefinitionCodeGenerator}\n */\nexport class TsDefinitionGenerator {\n\tconstructor(\n\t\tprivate readonly schema: Schema,\n\t\tprivate readonly conventions: NamingConventions = new DefaultNamingConventions(),\n\t) {\n\t}\n\n\tpublic generate() {\n\t\tconst generator = new DefinitionCodeGenerator(this.conventions)\n\t\treturn generator.generate(this.schema)\n\t}\n}\n"],"names":[],"mappings":";;;AAOO,MAAM,sBAAsB;AAAA,EAClC,YACkB,QACA,cAAiC,IAAI,4BACrD;AAFgB,SAAA,SAAA;AACA,SAAA,cAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"TsDefinitionGenerator.js","sources":["../../../../../packages/schema-utils/src/definition-generator/TsDefinitionGenerator.ts"],"sourcesContent":["import { Schema } from '@contember/schema'\nimport { DefaultNamingConventions, NamingConventions } from '../model'\nimport { DefinitionCodeGenerator } from './DefinitionCodeGenerator'\n\n/**\n * @deprecated use {@link DefinitionCodeGenerator}\n */\nexport class TsDefinitionGenerator {\n\tconstructor(\n\t\tprivate readonly schema: Schema,\n\t\tprivate readonly conventions: NamingConventions = new DefaultNamingConventions(),\n\t) {\n\t}\n\n\tpublic generate() {\n\t\tconst generator = new DefinitionCodeGenerator(this.conventions)\n\t\treturn generator.generate(this.schema)\n\t}\n}\n"],"names":[],"mappings":";;;AAOO,MAAM,sBAAsB;AAAA,EAClC,YACkB,QACA,cAAiC,IAAI,4BACrD;AAFgB,SAAA,SAAA;AACA,SAAA,cAAA;AAAA,EAElB;AAAA,EAEO,WAAW;AACjB,UAAM,YAAY,IAAI,wBAAwB,KAAK,WAAW;AAC9D,WAAO,UAAU,SAAS,KAAK,MAAM;AAAA,EACtC;AACD;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LaxSchemaConverter.cjs","sources":["../../../../../packages/schema-utils/src/lax/LaxSchemaConverter.ts"],"sourcesContent":["import { Model, Schema, Writable } from '@contember/schema'\nimport { LaxSchema, LaxSchemaColumn, LaxSchemaEnum, LaxSchemaField, LaxSchemaRelation } from './schema'\nimport { DefaultNamingConventions, NamingConventions, resolveDefaultColumnType } from '../model'\nimport { emptySchema } from '../index'\n\nconst simpleColumnTypes: { [K in LaxSchemaColumn['type']]: { type: Model.ColumnType; columnType: string } } = {\n\tboolean: { type: Model.ColumnType.Bool, columnType: 'boolean' },\n\tint: { type: Model.ColumnType.Int, columnType: 'integer' },\n\tdate: { type: Model.ColumnType.Date, columnType: 'date' },\n\tdatetime: { type: Model.ColumnType.DateTime, columnType: 'timestamptz' },\n\tfloat: { type: Model.ColumnType.Double, columnType: 'double precision' },\n\tjson: { type: Model.ColumnType.Json, columnType: 'jsonb' },\n\tstring: { type: Model.ColumnType.String, columnType: 'text' },\n}\n\nconst isColumnDefinition = (field: LaxSchemaField): field is LaxSchemaColumn => field.type in simpleColumnTypes\n\nexport class LaxSchemaConverter {\n\tconstructor(\n\t\tprivate readonly schema: LaxSchema,\n\t\tprivate readonly conventions: NamingConventions = new DefaultNamingConventions(),\n\t) {\n\t}\n\n\tpublic convert(): Schema {\n\t\tconst builder = new LaxSchemaBuilder(this.schema, this.conventions)\n\t\treturn builder.build()\n\t}\n\n}\n\nclass LaxSchemaBuilder {\n\tprivate readonly entities: Record<string, Model.Entity> = {}\n\tprivate readonly enums: Record<string, string[]> = {}\n\n\tconstructor(\n\t\tprivate readonly schema: LaxSchema,\n\t\tprivate readonly conventions: NamingConventions = new DefaultNamingConventions(),\n\t) {\n\t}\n\n\tpublic build(): Schema {\n\t\tfor (const [entityName, entityDefinition] of Object.entries(this.schema.entities)) {\n\t\t\tfor (const [fieldName, fieldDefinition] of Object.entries(entityDefinition.fields)) {\n\t\t\t\tif (isColumnDefinition(fieldDefinition)) {\n\t\t\t\t\tthis.processColumn(entityName, fieldName, fieldDefinition)\n\n\t\t\t\t} else if (fieldDefinition.type === 'enum') {\n\t\t\t\t\tthis.processEnum(entityName, fieldName, fieldDefinition)\n\n\t\t\t\t} else {\n\t\t\t\t\tthis.processRelation(entityName, fieldName, fieldDefinition)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t...emptySchema,\n\t\t\tmodel: {\n\t\t\t\tenums: this.enums,\n\t\t\t\tentities: this.entities,\n\t\t\t},\n\t\t}\n\t}\n\n\tprivate processColumn(entityName: string, fieldName: string, columnDef: LaxSchemaColumn) {\n\t\tconst columnName = this.conventions.getColumnName(fieldName)\n\t\tthis.registerField(entityName, {\n\t\t\tname: fieldName,\n\t\t\tcolumnName: columnName,\n\t\t\ttype: simpleColumnTypes[columnDef.type].type,\n\t\t\tnullable: !columnDef.notNull,\n\t\t\tcolumnType: simpleColumnTypes[columnDef.type].columnType,\n\t\t})\n\t}\n\n\tprivate processEnum(entityName: string, fieldName: string, enumDef: LaxSchemaEnum) {\n\t\tthis.enums[enumDef.enumName] = Array.from(new Set([...this.enums[enumDef.enumName] ?? [], ...enumDef.values]))\n\t\tconst columnName = this.conventions.getColumnName(fieldName)\n\t\tthis.registerField(entityName, {\n\t\t\tname: fieldName,\n\t\t\tcolumnName: columnName,\n\t\t\ttype: Model.ColumnType.Enum,\n\t\t\tnullable: !enumDef.notNull,\n\t\t\tcolumnType: enumDef.enumName,\n\t\t})\n\t}\n\n\tprivate processRelation(entityName: string, fieldName: string, relDef: LaxSchemaRelation) {\n\t\tswitch (relDef.type) {\n\t\t\tcase 'manyHasMany':\n\t\t\t\tconst joiningColumns = this.conventions.getJoiningTableColumnNames(entityName, fieldName, relDef.targetEntity, relDef.targetField)\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningTable: {\n\t\t\t\t\t\ttableName: this.conventions.getJoiningTableName(entityName, fieldName),\n\t\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\t\tcolumnName: joiningColumns[0],\n\t\t\t\t\t\t\tonDelete: Model.OnDelete.cascade,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinverseJoiningColumn: {\n\t\t\t\t\t\t\tcolumnName: joiningColumns[1],\n\t\t\t\t\t\t\tonDelete: Model.OnDelete.cascade,\n\t\t\t\t\t\t},\n\t\t\t\t\t\teventLog: { enabled: true },\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'manyHasManyInverse',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'manyHasManyInverse':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\tcase 'manyHasOne':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\tcolumnName: this.conventions.getJoiningColumnName(fieldName),\n\t\t\t\t\t\tonDelete: Model.OnDelete.restrict,\n\t\t\t\t\t},\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'oneHasMany',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'oneHasMany':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\tcase 'oneHasOne':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\tcolumnName: this.conventions.getJoiningColumnName(fieldName),\n\t\t\t\t\t\tonDelete: Model.OnDelete.restrict,\n\t\t\t\t\t},\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'oneHasOneInverse',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'oneHasOneInverse':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate registerField(entityName: string, field: Model.AnyField) {\n\t\tconst entity = this.getEntity(entityName)\n\t\t;(entity.fields as Writable<Model.Entity['fields']>)[field.name] = field\n\t}\n\n\n\tprivate getEntity(entityName: string): Model.Entity {\n\t\treturn this.entities[entityName] ??= {\n\t\t\tname: entityName,\n\t\t\tunique: [],\n\t\t\tindexes: [],\n\t\t\tprimary: 'id',\n\t\t\tprimaryColumn: 'id',\n\t\t\ttableName: this.conventions.getTableName(entityName),\n\t\t\teventLog: { enabled: true },\n\t\t\tfields: {\n\t\t\t\tid: {\n\t\t\t\t\tname: 'id',\n\t\t\t\t\tcolumnName: 'id',\n\t\t\t\t\ttype: Model.ColumnType.Uuid,\n\t\t\t\t\tcolumnType: resolveDefaultColumnType(Model.ColumnType.Uuid),\n\t\t\t\t\tnullable: false,\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":["Model","schema","DefaultNamingConventions","emptySchema","resolveDefaultColumnType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LaxSchemaConverter.cjs","sources":["../../../../../packages/schema-utils/src/lax/LaxSchemaConverter.ts"],"sourcesContent":["import { Model, Schema, Writable } from '@contember/schema'\nimport { LaxSchema, LaxSchemaColumn, LaxSchemaEnum, LaxSchemaField, LaxSchemaRelation } from './schema'\nimport { DefaultNamingConventions, NamingConventions, resolveDefaultColumnType } from '../model'\nimport { emptySchema } from '../index'\n\nconst simpleColumnTypes: { [K in LaxSchemaColumn['type']]: { type: Model.ColumnType; columnType: string } } = {\n\tboolean: { type: Model.ColumnType.Bool, columnType: 'boolean' },\n\tint: { type: Model.ColumnType.Int, columnType: 'integer' },\n\tdate: { type: Model.ColumnType.Date, columnType: 'date' },\n\tdatetime: { type: Model.ColumnType.DateTime, columnType: 'timestamptz' },\n\tfloat: { type: Model.ColumnType.Double, columnType: 'double precision' },\n\tjson: { type: Model.ColumnType.Json, columnType: 'jsonb' },\n\tstring: { type: Model.ColumnType.String, columnType: 'text' },\n}\n\nconst isColumnDefinition = (field: LaxSchemaField): field is LaxSchemaColumn => field.type in simpleColumnTypes\n\nexport class LaxSchemaConverter {\n\tconstructor(\n\t\tprivate readonly schema: LaxSchema,\n\t\tprivate readonly conventions: NamingConventions = new DefaultNamingConventions(),\n\t) {\n\t}\n\n\tpublic convert(): Schema {\n\t\tconst builder = new LaxSchemaBuilder(this.schema, this.conventions)\n\t\treturn builder.build()\n\t}\n}\n\nclass LaxSchemaBuilder {\n\tprivate readonly entities: Record<string, Model.Entity> = {}\n\tprivate readonly enums: Record<string, string[]> = {}\n\n\tconstructor(\n\t\tprivate readonly schema: LaxSchema,\n\t\tprivate readonly conventions: NamingConventions = new DefaultNamingConventions(),\n\t) {\n\t}\n\n\tpublic build(): Schema {\n\t\tfor (const [entityName, entityDefinition] of Object.entries(this.schema.entities)) {\n\t\t\tfor (const [fieldName, fieldDefinition] of Object.entries(entityDefinition.fields)) {\n\t\t\t\tif (isColumnDefinition(fieldDefinition)) {\n\t\t\t\t\tthis.processColumn(entityName, fieldName, fieldDefinition)\n\t\t\t\t} else if (fieldDefinition.type === 'enum') {\n\t\t\t\t\tthis.processEnum(entityName, fieldName, fieldDefinition)\n\t\t\t\t} else {\n\t\t\t\t\tthis.processRelation(entityName, fieldName, fieldDefinition)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t...emptySchema,\n\t\t\tmodel: {\n\t\t\t\tenums: this.enums,\n\t\t\t\tentities: this.entities,\n\t\t\t},\n\t\t}\n\t}\n\n\tprivate processColumn(entityName: string, fieldName: string, columnDef: LaxSchemaColumn) {\n\t\tconst columnName = this.conventions.getColumnName(fieldName)\n\t\tthis.registerField(entityName, {\n\t\t\tname: fieldName,\n\t\t\tcolumnName: columnName,\n\t\t\ttype: simpleColumnTypes[columnDef.type].type,\n\t\t\tnullable: !columnDef.notNull,\n\t\t\tcolumnType: simpleColumnTypes[columnDef.type].columnType,\n\t\t})\n\t}\n\n\tprivate processEnum(entityName: string, fieldName: string, enumDef: LaxSchemaEnum) {\n\t\tthis.enums[enumDef.enumName] = Array.from(new Set([...this.enums[enumDef.enumName] ?? [], ...enumDef.values]))\n\t\tconst columnName = this.conventions.getColumnName(fieldName)\n\t\tthis.registerField(entityName, {\n\t\t\tname: fieldName,\n\t\t\tcolumnName: columnName,\n\t\t\ttype: Model.ColumnType.Enum,\n\t\t\tnullable: !enumDef.notNull,\n\t\t\tcolumnType: enumDef.enumName,\n\t\t})\n\t}\n\n\tprivate processRelation(entityName: string, fieldName: string, relDef: LaxSchemaRelation) {\n\t\tswitch (relDef.type) {\n\t\t\tcase 'manyHasMany':\n\t\t\t\tconst joiningColumns = this.conventions.getJoiningTableColumnNames(entityName, fieldName, relDef.targetEntity, relDef.targetField)\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningTable: {\n\t\t\t\t\t\ttableName: this.conventions.getJoiningTableName(entityName, fieldName),\n\t\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\t\tcolumnName: joiningColumns[0],\n\t\t\t\t\t\t\tonDelete: Model.OnDelete.cascade,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinverseJoiningColumn: {\n\t\t\t\t\t\t\tcolumnName: joiningColumns[1],\n\t\t\t\t\t\t\tonDelete: Model.OnDelete.cascade,\n\t\t\t\t\t\t},\n\t\t\t\t\t\teventLog: { enabled: true },\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'manyHasManyInverse',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'manyHasManyInverse':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\tcase 'manyHasOne':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\tcolumnName: this.conventions.getJoiningColumnName(fieldName),\n\t\t\t\t\t\tonDelete: Model.OnDelete.restrict,\n\t\t\t\t\t},\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'oneHasMany',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'oneHasMany':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\tcase 'oneHasOne':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\tcolumnName: this.conventions.getJoiningColumnName(fieldName),\n\t\t\t\t\t\tonDelete: Model.OnDelete.restrict,\n\t\t\t\t\t},\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'oneHasOneInverse',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'oneHasOneInverse':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate registerField(entityName: string, field: Model.AnyField) {\n\t\tconst entity = this.getEntity(entityName)\n\t\t;(entity.fields as Writable<Model.Entity['fields']>)[field.name] = field\n\t}\n\n\tprivate getEntity(entityName: string): Model.Entity {\n\t\treturn this.entities[entityName] ??= {\n\t\t\tname: entityName,\n\t\t\tunique: [],\n\t\t\tindexes: [],\n\t\t\tprimary: 'id',\n\t\t\tprimaryColumn: 'id',\n\t\t\ttableName: this.conventions.getTableName(entityName),\n\t\t\teventLog: { enabled: true },\n\t\t\tfields: {\n\t\t\t\tid: {\n\t\t\t\t\tname: 'id',\n\t\t\t\t\tcolumnName: 'id',\n\t\t\t\t\ttype: Model.ColumnType.Uuid,\n\t\t\t\t\tcolumnType: resolveDefaultColumnType(Model.ColumnType.Uuid),\n\t\t\t\t\tnullable: false,\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":["Model","schema","DefaultNamingConventions","emptySchema","resolveDefaultColumnType"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LaxSchemaConverter.js","sources":["../../../../../packages/schema-utils/src/lax/LaxSchemaConverter.ts"],"sourcesContent":["import { Model, Schema, Writable } from '@contember/schema'\nimport { LaxSchema, LaxSchemaColumn, LaxSchemaEnum, LaxSchemaField, LaxSchemaRelation } from './schema'\nimport { DefaultNamingConventions, NamingConventions, resolveDefaultColumnType } from '../model'\nimport { emptySchema } from '../index'\n\nconst simpleColumnTypes: { [K in LaxSchemaColumn['type']]: { type: Model.ColumnType; columnType: string } } = {\n\tboolean: { type: Model.ColumnType.Bool, columnType: 'boolean' },\n\tint: { type: Model.ColumnType.Int, columnType: 'integer' },\n\tdate: { type: Model.ColumnType.Date, columnType: 'date' },\n\tdatetime: { type: Model.ColumnType.DateTime, columnType: 'timestamptz' },\n\tfloat: { type: Model.ColumnType.Double, columnType: 'double precision' },\n\tjson: { type: Model.ColumnType.Json, columnType: 'jsonb' },\n\tstring: { type: Model.ColumnType.String, columnType: 'text' },\n}\n\nconst isColumnDefinition = (field: LaxSchemaField): field is LaxSchemaColumn => field.type in simpleColumnTypes\n\nexport class LaxSchemaConverter {\n\tconstructor(\n\t\tprivate readonly schema: LaxSchema,\n\t\tprivate readonly conventions: NamingConventions = new DefaultNamingConventions(),\n\t) {\n\t}\n\n\tpublic convert(): Schema {\n\t\tconst builder = new LaxSchemaBuilder(this.schema, this.conventions)\n\t\treturn builder.build()\n\t}\n\n}\n\nclass LaxSchemaBuilder {\n\tprivate readonly entities: Record<string, Model.Entity> = {}\n\tprivate readonly enums: Record<string, string[]> = {}\n\n\tconstructor(\n\t\tprivate readonly schema: LaxSchema,\n\t\tprivate readonly conventions: NamingConventions = new DefaultNamingConventions(),\n\t) {\n\t}\n\n\tpublic build(): Schema {\n\t\tfor (const [entityName, entityDefinition] of Object.entries(this.schema.entities)) {\n\t\t\tfor (const [fieldName, fieldDefinition] of Object.entries(entityDefinition.fields)) {\n\t\t\t\tif (isColumnDefinition(fieldDefinition)) {\n\t\t\t\t\tthis.processColumn(entityName, fieldName, fieldDefinition)\n\n\t\t\t\t} else if (fieldDefinition.type === 'enum') {\n\t\t\t\t\tthis.processEnum(entityName, fieldName, fieldDefinition)\n\n\t\t\t\t} else {\n\t\t\t\t\tthis.processRelation(entityName, fieldName, fieldDefinition)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t...emptySchema,\n\t\t\tmodel: {\n\t\t\t\tenums: this.enums,\n\t\t\t\tentities: this.entities,\n\t\t\t},\n\t\t}\n\t}\n\n\tprivate processColumn(entityName: string, fieldName: string, columnDef: LaxSchemaColumn) {\n\t\tconst columnName = this.conventions.getColumnName(fieldName)\n\t\tthis.registerField(entityName, {\n\t\t\tname: fieldName,\n\t\t\tcolumnName: columnName,\n\t\t\ttype: simpleColumnTypes[columnDef.type].type,\n\t\t\tnullable: !columnDef.notNull,\n\t\t\tcolumnType: simpleColumnTypes[columnDef.type].columnType,\n\t\t})\n\t}\n\n\tprivate processEnum(entityName: string, fieldName: string, enumDef: LaxSchemaEnum) {\n\t\tthis.enums[enumDef.enumName] = Array.from(new Set([...this.enums[enumDef.enumName] ?? [], ...enumDef.values]))\n\t\tconst columnName = this.conventions.getColumnName(fieldName)\n\t\tthis.registerField(entityName, {\n\t\t\tname: fieldName,\n\t\t\tcolumnName: columnName,\n\t\t\ttype: Model.ColumnType.Enum,\n\t\t\tnullable: !enumDef.notNull,\n\t\t\tcolumnType: enumDef.enumName,\n\t\t})\n\t}\n\n\tprivate processRelation(entityName: string, fieldName: string, relDef: LaxSchemaRelation) {\n\t\tswitch (relDef.type) {\n\t\t\tcase 'manyHasMany':\n\t\t\t\tconst joiningColumns = this.conventions.getJoiningTableColumnNames(entityName, fieldName, relDef.targetEntity, relDef.targetField)\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningTable: {\n\t\t\t\t\t\ttableName: this.conventions.getJoiningTableName(entityName, fieldName),\n\t\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\t\tcolumnName: joiningColumns[0],\n\t\t\t\t\t\t\tonDelete: Model.OnDelete.cascade,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinverseJoiningColumn: {\n\t\t\t\t\t\t\tcolumnName: joiningColumns[1],\n\t\t\t\t\t\t\tonDelete: Model.OnDelete.cascade,\n\t\t\t\t\t\t},\n\t\t\t\t\t\teventLog: { enabled: true },\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'manyHasManyInverse',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'manyHasManyInverse':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\tcase 'manyHasOne':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\tcolumnName: this.conventions.getJoiningColumnName(fieldName),\n\t\t\t\t\t\tonDelete: Model.OnDelete.restrict,\n\t\t\t\t\t},\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'oneHasMany',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'oneHasMany':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\tcase 'oneHasOne':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\tcolumnName: this.conventions.getJoiningColumnName(fieldName),\n\t\t\t\t\t\tonDelete: Model.OnDelete.restrict,\n\t\t\t\t\t},\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'oneHasOneInverse',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'oneHasOneInverse':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate registerField(entityName: string, field: Model.AnyField) {\n\t\tconst entity = this.getEntity(entityName)\n\t\t;(entity.fields as Writable<Model.Entity['fields']>)[field.name] = field\n\t}\n\n\n\tprivate getEntity(entityName: string): Model.Entity {\n\t\treturn this.entities[entityName] ??= {\n\t\t\tname: entityName,\n\t\t\tunique: [],\n\t\t\tindexes: [],\n\t\t\tprimary: 'id',\n\t\t\tprimaryColumn: 'id',\n\t\t\ttableName: this.conventions.getTableName(entityName),\n\t\t\teventLog: { enabled: true },\n\t\t\tfields: {\n\t\t\t\tid: {\n\t\t\t\t\tname: 'id',\n\t\t\t\t\tcolumnName: 'id',\n\t\t\t\t\ttype: Model.ColumnType.Uuid,\n\t\t\t\t\tcolumnType: resolveDefaultColumnType(Model.ColumnType.Uuid),\n\t\t\t\t\tnullable: false,\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LaxSchemaConverter.js","sources":["../../../../../packages/schema-utils/src/lax/LaxSchemaConverter.ts"],"sourcesContent":["import { Model, Schema, Writable } from '@contember/schema'\nimport { LaxSchema, LaxSchemaColumn, LaxSchemaEnum, LaxSchemaField, LaxSchemaRelation } from './schema'\nimport { DefaultNamingConventions, NamingConventions, resolveDefaultColumnType } from '../model'\nimport { emptySchema } from '../index'\n\nconst simpleColumnTypes: { [K in LaxSchemaColumn['type']]: { type: Model.ColumnType; columnType: string } } = {\n\tboolean: { type: Model.ColumnType.Bool, columnType: 'boolean' },\n\tint: { type: Model.ColumnType.Int, columnType: 'integer' },\n\tdate: { type: Model.ColumnType.Date, columnType: 'date' },\n\tdatetime: { type: Model.ColumnType.DateTime, columnType: 'timestamptz' },\n\tfloat: { type: Model.ColumnType.Double, columnType: 'double precision' },\n\tjson: { type: Model.ColumnType.Json, columnType: 'jsonb' },\n\tstring: { type: Model.ColumnType.String, columnType: 'text' },\n}\n\nconst isColumnDefinition = (field: LaxSchemaField): field is LaxSchemaColumn => field.type in simpleColumnTypes\n\nexport class LaxSchemaConverter {\n\tconstructor(\n\t\tprivate readonly schema: LaxSchema,\n\t\tprivate readonly conventions: NamingConventions = new DefaultNamingConventions(),\n\t) {\n\t}\n\n\tpublic convert(): Schema {\n\t\tconst builder = new LaxSchemaBuilder(this.schema, this.conventions)\n\t\treturn builder.build()\n\t}\n}\n\nclass LaxSchemaBuilder {\n\tprivate readonly entities: Record<string, Model.Entity> = {}\n\tprivate readonly enums: Record<string, string[]> = {}\n\n\tconstructor(\n\t\tprivate readonly schema: LaxSchema,\n\t\tprivate readonly conventions: NamingConventions = new DefaultNamingConventions(),\n\t) {\n\t}\n\n\tpublic build(): Schema {\n\t\tfor (const [entityName, entityDefinition] of Object.entries(this.schema.entities)) {\n\t\t\tfor (const [fieldName, fieldDefinition] of Object.entries(entityDefinition.fields)) {\n\t\t\t\tif (isColumnDefinition(fieldDefinition)) {\n\t\t\t\t\tthis.processColumn(entityName, fieldName, fieldDefinition)\n\t\t\t\t} else if (fieldDefinition.type === 'enum') {\n\t\t\t\t\tthis.processEnum(entityName, fieldName, fieldDefinition)\n\t\t\t\t} else {\n\t\t\t\t\tthis.processRelation(entityName, fieldName, fieldDefinition)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t...emptySchema,\n\t\t\tmodel: {\n\t\t\t\tenums: this.enums,\n\t\t\t\tentities: this.entities,\n\t\t\t},\n\t\t}\n\t}\n\n\tprivate processColumn(entityName: string, fieldName: string, columnDef: LaxSchemaColumn) {\n\t\tconst columnName = this.conventions.getColumnName(fieldName)\n\t\tthis.registerField(entityName, {\n\t\t\tname: fieldName,\n\t\t\tcolumnName: columnName,\n\t\t\ttype: simpleColumnTypes[columnDef.type].type,\n\t\t\tnullable: !columnDef.notNull,\n\t\t\tcolumnType: simpleColumnTypes[columnDef.type].columnType,\n\t\t})\n\t}\n\n\tprivate processEnum(entityName: string, fieldName: string, enumDef: LaxSchemaEnum) {\n\t\tthis.enums[enumDef.enumName] = Array.from(new Set([...this.enums[enumDef.enumName] ?? [], ...enumDef.values]))\n\t\tconst columnName = this.conventions.getColumnName(fieldName)\n\t\tthis.registerField(entityName, {\n\t\t\tname: fieldName,\n\t\t\tcolumnName: columnName,\n\t\t\ttype: Model.ColumnType.Enum,\n\t\t\tnullable: !enumDef.notNull,\n\t\t\tcolumnType: enumDef.enumName,\n\t\t})\n\t}\n\n\tprivate processRelation(entityName: string, fieldName: string, relDef: LaxSchemaRelation) {\n\t\tswitch (relDef.type) {\n\t\t\tcase 'manyHasMany':\n\t\t\t\tconst joiningColumns = this.conventions.getJoiningTableColumnNames(entityName, fieldName, relDef.targetEntity, relDef.targetField)\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningTable: {\n\t\t\t\t\t\ttableName: this.conventions.getJoiningTableName(entityName, fieldName),\n\t\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\t\tcolumnName: joiningColumns[0],\n\t\t\t\t\t\t\tonDelete: Model.OnDelete.cascade,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinverseJoiningColumn: {\n\t\t\t\t\t\t\tcolumnName: joiningColumns[1],\n\t\t\t\t\t\t\tonDelete: Model.OnDelete.cascade,\n\t\t\t\t\t\t},\n\t\t\t\t\t\teventLog: { enabled: true },\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'manyHasManyInverse',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'manyHasManyInverse':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\tcase 'manyHasOne':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\tcolumnName: this.conventions.getJoiningColumnName(fieldName),\n\t\t\t\t\t\tonDelete: Model.OnDelete.restrict,\n\t\t\t\t\t},\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'oneHasMany',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'oneHasMany':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\tcase 'oneHasOne':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\tcolumnName: this.conventions.getJoiningColumnName(fieldName),\n\t\t\t\t\t\tonDelete: Model.OnDelete.restrict,\n\t\t\t\t\t},\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'oneHasOneInverse',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'oneHasOneInverse':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate registerField(entityName: string, field: Model.AnyField) {\n\t\tconst entity = this.getEntity(entityName)\n\t\t;(entity.fields as Writable<Model.Entity['fields']>)[field.name] = field\n\t}\n\n\tprivate getEntity(entityName: string): Model.Entity {\n\t\treturn this.entities[entityName] ??= {\n\t\t\tname: entityName,\n\t\t\tunique: [],\n\t\t\tindexes: [],\n\t\t\tprimary: 'id',\n\t\t\tprimaryColumn: 'id',\n\t\t\ttableName: this.conventions.getTableName(entityName),\n\t\t\teventLog: { enabled: true },\n\t\t\tfields: {\n\t\t\t\tid: {\n\t\t\t\t\tname: 'id',\n\t\t\t\t\tcolumnName: 'id',\n\t\t\t\t\ttype: Model.ColumnType.Uuid,\n\t\t\t\t\tcolumnType: resolveDefaultColumnType(Model.ColumnType.Uuid),\n\t\t\t\t\tnullable: false,\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.cjs","sources":["../../../../../packages/schema-utils/src/lax/schema.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\n\nconst LaxSchemaEnumInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvalues: Typesafe.array(Typesafe.string),\n\t\tenumName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tnotNull: Typesafe.boolean,\n\t\tunique: Typesafe.boolean,\n\t}),\n)\n\nconst LaxSchemaColumnInner = Typesafe.partial({\n\tnotNull: Typesafe.boolean,\n\tunique: Typesafe.boolean,\n})\n\nconst LaxSchemaRelationInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttargetEntity: Typesafe.string,\n\t\ttargetField: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tnotNull: Typesafe.boolean,\n\t}),\n)\n\nconst LaxSchemaField = Typesafe.discriminatedUnion('type', {\n\toneHasOne: LaxSchemaRelationInner,\n\toneHasOneInverse: LaxSchemaRelationInner,\n\tmanyHasMany: LaxSchemaRelationInner,\n\tmanyHasManyInverse: LaxSchemaRelationInner,\n\toneHasMany: LaxSchemaRelationInner,\n\tmanyHasOne: LaxSchemaRelationInner,\n\tint: LaxSchemaColumnInner,\n\tfloat: LaxSchemaColumnInner,\n\tboolean: LaxSchemaColumnInner,\n\tstring: LaxSchemaColumnInner,\n\tjson: LaxSchemaColumnInner,\n\tdate: LaxSchemaColumnInner,\n\tdatetime: LaxSchemaColumnInner,\n\tenum: LaxSchemaEnumInner,\n})\n\nexport type LaxSchemaField = ReturnType<typeof LaxSchemaField>\nexport type LaxSchemaEnum = Extract<LaxSchemaField, { type: 'enum' }>\nexport type LaxSchemaColumn = Extract<LaxSchemaField, { type: 'int' | 'float' | 'boolean' | 'string' | 'json' | 'datetime' | 'date' | 'uuid' }>\nexport type LaxSchemaRelation = Extract
|
|
1
|
+
{"version":3,"file":"schema.cjs","sources":["../../../../../packages/schema-utils/src/lax/schema.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\n\nconst LaxSchemaEnumInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvalues: Typesafe.array(Typesafe.string),\n\t\tenumName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tnotNull: Typesafe.boolean,\n\t\tunique: Typesafe.boolean,\n\t}),\n)\n\nconst LaxSchemaColumnInner = Typesafe.partial({\n\tnotNull: Typesafe.boolean,\n\tunique: Typesafe.boolean,\n})\n\nconst LaxSchemaRelationInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttargetEntity: Typesafe.string,\n\t\ttargetField: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tnotNull: Typesafe.boolean,\n\t}),\n)\n\nconst LaxSchemaField = Typesafe.discriminatedUnion('type', {\n\toneHasOne: LaxSchemaRelationInner,\n\toneHasOneInverse: LaxSchemaRelationInner,\n\tmanyHasMany: LaxSchemaRelationInner,\n\tmanyHasManyInverse: LaxSchemaRelationInner,\n\toneHasMany: LaxSchemaRelationInner,\n\tmanyHasOne: LaxSchemaRelationInner,\n\tint: LaxSchemaColumnInner,\n\tfloat: LaxSchemaColumnInner,\n\tboolean: LaxSchemaColumnInner,\n\tstring: LaxSchemaColumnInner,\n\tjson: LaxSchemaColumnInner,\n\tdate: LaxSchemaColumnInner,\n\tdatetime: LaxSchemaColumnInner,\n\tenum: LaxSchemaEnumInner,\n})\n\nexport type LaxSchemaField = ReturnType<typeof LaxSchemaField>\nexport type LaxSchemaEnum = Extract<LaxSchemaField, { type: 'enum' }>\nexport type LaxSchemaColumn = Extract<LaxSchemaField, { type: 'int' | 'float' | 'boolean' | 'string' | 'json' | 'datetime' | 'date' | 'uuid' }>\nexport type LaxSchemaRelation = Extract<\n\tLaxSchemaField,\n\t{ type: 'oneHasOne' | 'oneHasOneInverse' | 'manyHasMany' | 'manyHasManyInverse' | 'oneHasMany' | 'manyHasOne' }\n>\n\nconst LaxSchemaEntity = Typesafe.object({\n\tfields: Typesafe.record(Typesafe.string, LaxSchemaField),\n})\nexport type LaxSchemaEntity = ReturnType<typeof LaxSchemaEntity>\n\nexport const LaxSchema = Typesafe.object({\n\tentities: Typesafe.record(\n\t\tTypesafe.string,\n\t\tLaxSchemaEntity,\n\t),\n})\nexport type LaxSchema = ReturnType<typeof LaxSchema>\n"],"names":["Typesafe"],"mappings":";;;;;;;;;;;;;;;;;;;;AAEA,MAAM,qBAAqBA,oBAAS;AAAA,EACnCA,oBAAS,OAAO;AAAA,IACf,QAAQA,oBAAS,MAAMA,oBAAS,MAAM;AAAA,IACtC,UAAUA,oBAAS;AAAA,EAAA,CACnB;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,SAASA,oBAAS;AAAA,IAClB,QAAQA,oBAAS;AAAA,EAAA,CACjB;AACF;AAEA,MAAM,uBAAuBA,oBAAS,QAAQ;AAAA,EAC7C,SAASA,oBAAS;AAAA,EAClB,QAAQA,oBAAS;AAClB,CAAC;AAED,MAAM,yBAAyBA,oBAAS;AAAA,EACvCA,oBAAS,OAAO;AAAA,IACf,cAAcA,oBAAS;AAAA,IACvB,aAAaA,oBAAS;AAAA,EAAA,CACtB;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,SAASA,oBAAS;AAAA,EAAA,CAClB;AACF;AAEA,MAAM,iBAAiBA,oBAAS,mBAAmB,QAAQ;AAAA,EAC1D,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,oBAAoB;AAAA,EACpB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AACP,CAAC;AAUD,MAAM,kBAAkBA,oBAAS,OAAO;AAAA,EACvC,QAAQA,oBAAS,OAAOA,oBAAS,QAAQ,cAAc;AACxD,CAAC;AAGM,MAAM,YAAYA,oBAAS,OAAO;AAAA,EACxC,UAAUA,oBAAS;AAAA,IAClBA,oBAAS;AAAA,IACT;AAAA,EAAA;AAEF,CAAC;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sources":["../../../../../packages/schema-utils/src/lax/schema.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\n\nconst LaxSchemaEnumInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvalues: Typesafe.array(Typesafe.string),\n\t\tenumName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tnotNull: Typesafe.boolean,\n\t\tunique: Typesafe.boolean,\n\t}),\n)\n\nconst LaxSchemaColumnInner = Typesafe.partial({\n\tnotNull: Typesafe.boolean,\n\tunique: Typesafe.boolean,\n})\n\nconst LaxSchemaRelationInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttargetEntity: Typesafe.string,\n\t\ttargetField: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tnotNull: Typesafe.boolean,\n\t}),\n)\n\nconst LaxSchemaField = Typesafe.discriminatedUnion('type', {\n\toneHasOne: LaxSchemaRelationInner,\n\toneHasOneInverse: LaxSchemaRelationInner,\n\tmanyHasMany: LaxSchemaRelationInner,\n\tmanyHasManyInverse: LaxSchemaRelationInner,\n\toneHasMany: LaxSchemaRelationInner,\n\tmanyHasOne: LaxSchemaRelationInner,\n\tint: LaxSchemaColumnInner,\n\tfloat: LaxSchemaColumnInner,\n\tboolean: LaxSchemaColumnInner,\n\tstring: LaxSchemaColumnInner,\n\tjson: LaxSchemaColumnInner,\n\tdate: LaxSchemaColumnInner,\n\tdatetime: LaxSchemaColumnInner,\n\tenum: LaxSchemaEnumInner,\n})\n\nexport type LaxSchemaField = ReturnType<typeof LaxSchemaField>\nexport type LaxSchemaEnum = Extract<LaxSchemaField, { type: 'enum' }>\nexport type LaxSchemaColumn = Extract<LaxSchemaField, { type: 'int' | 'float' | 'boolean' | 'string' | 'json' | 'datetime' | 'date' | 'uuid' }>\nexport type LaxSchemaRelation = Extract
|
|
1
|
+
{"version":3,"file":"schema.js","sources":["../../../../../packages/schema-utils/src/lax/schema.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\n\nconst LaxSchemaEnumInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvalues: Typesafe.array(Typesafe.string),\n\t\tenumName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tnotNull: Typesafe.boolean,\n\t\tunique: Typesafe.boolean,\n\t}),\n)\n\nconst LaxSchemaColumnInner = Typesafe.partial({\n\tnotNull: Typesafe.boolean,\n\tunique: Typesafe.boolean,\n})\n\nconst LaxSchemaRelationInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttargetEntity: Typesafe.string,\n\t\ttargetField: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tnotNull: Typesafe.boolean,\n\t}),\n)\n\nconst LaxSchemaField = Typesafe.discriminatedUnion('type', {\n\toneHasOne: LaxSchemaRelationInner,\n\toneHasOneInverse: LaxSchemaRelationInner,\n\tmanyHasMany: LaxSchemaRelationInner,\n\tmanyHasManyInverse: LaxSchemaRelationInner,\n\toneHasMany: LaxSchemaRelationInner,\n\tmanyHasOne: LaxSchemaRelationInner,\n\tint: LaxSchemaColumnInner,\n\tfloat: LaxSchemaColumnInner,\n\tboolean: LaxSchemaColumnInner,\n\tstring: LaxSchemaColumnInner,\n\tjson: LaxSchemaColumnInner,\n\tdate: LaxSchemaColumnInner,\n\tdatetime: LaxSchemaColumnInner,\n\tenum: LaxSchemaEnumInner,\n})\n\nexport type LaxSchemaField = ReturnType<typeof LaxSchemaField>\nexport type LaxSchemaEnum = Extract<LaxSchemaField, { type: 'enum' }>\nexport type LaxSchemaColumn = Extract<LaxSchemaField, { type: 'int' | 'float' | 'boolean' | 'string' | 'json' | 'datetime' | 'date' | 'uuid' }>\nexport type LaxSchemaRelation = Extract<\n\tLaxSchemaField,\n\t{ type: 'oneHasOne' | 'oneHasOneInverse' | 'manyHasMany' | 'manyHasManyInverse' | 'oneHasMany' | 'manyHasOne' }\n>\n\nconst LaxSchemaEntity = Typesafe.object({\n\tfields: Typesafe.record(Typesafe.string, LaxSchemaField),\n})\nexport type LaxSchemaEntity = ReturnType<typeof LaxSchemaEntity>\n\nexport const LaxSchema = Typesafe.object({\n\tentities: Typesafe.record(\n\t\tTypesafe.string,\n\t\tLaxSchemaEntity,\n\t),\n})\nexport type LaxSchema = ReturnType<typeof LaxSchema>\n"],"names":[],"mappings":";AAEA,MAAM,qBAAqB,SAAS;AAAA,EACnC,SAAS,OAAO;AAAA,IACf,QAAQ,SAAS,MAAM,SAAS,MAAM;AAAA,IACtC,UAAU,SAAS;AAAA,EAAA,CACnB;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,SAAS,SAAS;AAAA,IAClB,QAAQ,SAAS;AAAA,EAAA,CACjB;AACF;AAEA,MAAM,uBAAuB,SAAS,QAAQ;AAAA,EAC7C,SAAS,SAAS;AAAA,EAClB,QAAQ,SAAS;AAClB,CAAC;AAED,MAAM,yBAAyB,SAAS;AAAA,EACvC,SAAS,OAAO;AAAA,IACf,cAAc,SAAS;AAAA,IACvB,aAAa,SAAS;AAAA,EAAA,CACtB;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,SAAS,SAAS;AAAA,EAAA,CAClB;AACF;AAEA,MAAM,iBAAiB,SAAS,mBAAmB,QAAQ;AAAA,EAC1D,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,oBAAoB;AAAA,EACpB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AACP,CAAC;AAUD,MAAM,kBAAkB,SAAS,OAAO;AAAA,EACvC,QAAQ,SAAS,OAAO,SAAS,QAAQ,cAAc;AACxD,CAAC;AAGM,MAAM,YAAY,SAAS,OAAO;AAAA,EACxC,UAAU,SAAS;AAAA,IAClB,SAAS;AAAA,IACT;AAAA,EAAA;AAEF,CAAC;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NamingConventions.cjs","sources":["../../../../../packages/schema-utils/src/model/NamingConventions.ts"],"sourcesContent":["export interface NamingConventions {\n\tgetPrimaryField(): string\n\n\tgetColumnName(fieldName: string): string\n\n\tgetTableName(entityName: string): string\n\n\tgetJoiningColumnName(relationName: string): string\n\n\tgetJoiningTableName(entity: string, relation: string): string\n\n\tgetJoiningTableColumnNames(\n\t\towningEntity: string,\n\t\towningRelation: string,\n\t\tinverseEntity: string,\n\t\tinverseRelation?: string,\n\t): [string, string]\n}\n\nconst toUnderscore = (s: string) => s.replace(/([A-Z]+)/g, (x, y) => '_' + y.toLowerCase()).replace(/^_/, '')\nexport class DefaultNamingConventions implements NamingConventions {\n\tgetPrimaryField(): string {\n\t\treturn 'id'\n\t}\n\n\tgetColumnName(fieldName: string): string {\n\t\treturn toUnderscore(fieldName)\n\t}\n\n\tgetTableName(entityName: string): string {\n\t\treturn toUnderscore(entityName)\n\t}\n\n\tgetJoiningColumnName(relationName: string): string {\n\t\treturn toUnderscore(relationName) + '_id'\n\t}\n\n\tgetJoiningTableName(entity: string, relation: string): string {\n\t\treturn toUnderscore(entity) + '_' + toUnderscore(relation)\n\t}\n\n\tgetJoiningTableColumnNames(\n\t\towningEntity: string,\n\t\towningRelation: string,\n\t\tinverseEntity: string,\n\t\tinverseRelation?: string,\n\t): [string, string] {\n\t\treturn [\n\t\t\ttoUnderscore(owningEntity) + '_id',\n\t\t\ttoUnderscore(inverseEntity === owningEntity ? owningRelation : inverseEntity) + '_id',\n\t\t]\n\t}\n}\n"],"names":[],"mappings":";;AAmBA,MAAM,eAAe,CAAC,MAAc,EAAE,QAAQ,aAAa,CAAC,GAAG,MAAM,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"NamingConventions.cjs","sources":["../../../../../packages/schema-utils/src/model/NamingConventions.ts"],"sourcesContent":["export interface NamingConventions {\n\tgetPrimaryField(): string\n\n\tgetColumnName(fieldName: string): string\n\n\tgetTableName(entityName: string): string\n\n\tgetJoiningColumnName(relationName: string): string\n\n\tgetJoiningTableName(entity: string, relation: string): string\n\n\tgetJoiningTableColumnNames(\n\t\towningEntity: string,\n\t\towningRelation: string,\n\t\tinverseEntity: string,\n\t\tinverseRelation?: string,\n\t): [string, string]\n}\n\nconst toUnderscore = (s: string) => s.replace(/([A-Z]+)/g, (x, y) => '_' + y.toLowerCase()).replace(/^_/, '')\nexport class DefaultNamingConventions implements NamingConventions {\n\tgetPrimaryField(): string {\n\t\treturn 'id'\n\t}\n\n\tgetColumnName(fieldName: string): string {\n\t\treturn toUnderscore(fieldName)\n\t}\n\n\tgetTableName(entityName: string): string {\n\t\treturn toUnderscore(entityName)\n\t}\n\n\tgetJoiningColumnName(relationName: string): string {\n\t\treturn toUnderscore(relationName) + '_id'\n\t}\n\n\tgetJoiningTableName(entity: string, relation: string): string {\n\t\treturn toUnderscore(entity) + '_' + toUnderscore(relation)\n\t}\n\n\tgetJoiningTableColumnNames(\n\t\towningEntity: string,\n\t\towningRelation: string,\n\t\tinverseEntity: string,\n\t\tinverseRelation?: string,\n\t): [string, string] {\n\t\treturn [\n\t\t\ttoUnderscore(owningEntity) + '_id',\n\t\t\ttoUnderscore(inverseEntity === owningEntity ? owningRelation : inverseEntity) + '_id',\n\t\t]\n\t}\n}\n"],"names":[],"mappings":";;AAmBA,MAAM,eAAe,CAAC,MAAc,EAAE,QAAQ,aAAa,CAAC,GAAG,MAAM,MAAM,EAAE,YAAA,CAAa,EAAE,QAAQ,MAAM,EAAE;AACrG,MAAM,yBAAsD;AAAA,EAClE,kBAA0B;AACzB,WAAO;AAAA,EACR;AAAA,EAEA,cAAc,WAA2B;AACxC,WAAO,aAAa,SAAS;AAAA,EAC9B;AAAA,EAEA,aAAa,YAA4B;AACxC,WAAO,aAAa,UAAU;AAAA,EAC/B;AAAA,EAEA,qBAAqB,cAA8B;AAClD,WAAO,aAAa,YAAY,IAAI;AAAA,EACrC;AAAA,EAEA,oBAAoB,QAAgB,UAA0B;AAC7D,WAAO,aAAa,MAAM,IAAI,MAAM,aAAa,QAAQ;AAAA,EAC1D;AAAA,EAEA,2BACC,cACA,gBACA,eACA,iBACmB;AACnB,WAAO;AAAA,MACN,aAAa,YAAY,IAAI;AAAA,MAC7B,aAAa,kBAAkB,eAAe,iBAAiB,aAAa,IAAI;AAAA,IAAA;AAAA,EAElF;AACD;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NamingConventions.js","sources":["../../../../../packages/schema-utils/src/model/NamingConventions.ts"],"sourcesContent":["export interface NamingConventions {\n\tgetPrimaryField(): string\n\n\tgetColumnName(fieldName: string): string\n\n\tgetTableName(entityName: string): string\n\n\tgetJoiningColumnName(relationName: string): string\n\n\tgetJoiningTableName(entity: string, relation: string): string\n\n\tgetJoiningTableColumnNames(\n\t\towningEntity: string,\n\t\towningRelation: string,\n\t\tinverseEntity: string,\n\t\tinverseRelation?: string,\n\t): [string, string]\n}\n\nconst toUnderscore = (s: string) => s.replace(/([A-Z]+)/g, (x, y) => '_' + y.toLowerCase()).replace(/^_/, '')\nexport class DefaultNamingConventions implements NamingConventions {\n\tgetPrimaryField(): string {\n\t\treturn 'id'\n\t}\n\n\tgetColumnName(fieldName: string): string {\n\t\treturn toUnderscore(fieldName)\n\t}\n\n\tgetTableName(entityName: string): string {\n\t\treturn toUnderscore(entityName)\n\t}\n\n\tgetJoiningColumnName(relationName: string): string {\n\t\treturn toUnderscore(relationName) + '_id'\n\t}\n\n\tgetJoiningTableName(entity: string, relation: string): string {\n\t\treturn toUnderscore(entity) + '_' + toUnderscore(relation)\n\t}\n\n\tgetJoiningTableColumnNames(\n\t\towningEntity: string,\n\t\towningRelation: string,\n\t\tinverseEntity: string,\n\t\tinverseRelation?: string,\n\t): [string, string] {\n\t\treturn [\n\t\t\ttoUnderscore(owningEntity) + '_id',\n\t\t\ttoUnderscore(inverseEntity === owningEntity ? owningRelation : inverseEntity) + '_id',\n\t\t]\n\t}\n}\n"],"names":[],"mappings":"AAmBA,MAAM,eAAe,CAAC,MAAc,EAAE,QAAQ,aAAa,CAAC,GAAG,MAAM,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"NamingConventions.js","sources":["../../../../../packages/schema-utils/src/model/NamingConventions.ts"],"sourcesContent":["export interface NamingConventions {\n\tgetPrimaryField(): string\n\n\tgetColumnName(fieldName: string): string\n\n\tgetTableName(entityName: string): string\n\n\tgetJoiningColumnName(relationName: string): string\n\n\tgetJoiningTableName(entity: string, relation: string): string\n\n\tgetJoiningTableColumnNames(\n\t\towningEntity: string,\n\t\towningRelation: string,\n\t\tinverseEntity: string,\n\t\tinverseRelation?: string,\n\t): [string, string]\n}\n\nconst toUnderscore = (s: string) => s.replace(/([A-Z]+)/g, (x, y) => '_' + y.toLowerCase()).replace(/^_/, '')\nexport class DefaultNamingConventions implements NamingConventions {\n\tgetPrimaryField(): string {\n\t\treturn 'id'\n\t}\n\n\tgetColumnName(fieldName: string): string {\n\t\treturn toUnderscore(fieldName)\n\t}\n\n\tgetTableName(entityName: string): string {\n\t\treturn toUnderscore(entityName)\n\t}\n\n\tgetJoiningColumnName(relationName: string): string {\n\t\treturn toUnderscore(relationName) + '_id'\n\t}\n\n\tgetJoiningTableName(entity: string, relation: string): string {\n\t\treturn toUnderscore(entity) + '_' + toUnderscore(relation)\n\t}\n\n\tgetJoiningTableColumnNames(\n\t\towningEntity: string,\n\t\towningRelation: string,\n\t\tinverseEntity: string,\n\t\tinverseRelation?: string,\n\t): [string, string] {\n\t\treturn [\n\t\t\ttoUnderscore(owningEntity) + '_id',\n\t\t\ttoUnderscore(inverseEntity === owningEntity ? owningRelation : inverseEntity) + '_id',\n\t\t]\n\t}\n}\n"],"names":[],"mappings":"AAmBA,MAAM,eAAe,CAAC,MAAc,EAAE,QAAQ,aAAa,CAAC,GAAG,MAAM,MAAM,EAAE,YAAA,CAAa,EAAE,QAAQ,MAAM,EAAE;AACrG,MAAM,yBAAsD;AAAA,EAClE,kBAA0B;AACzB,WAAO;AAAA,EACR;AAAA,EAEA,cAAc,WAA2B;AACxC,WAAO,aAAa,SAAS;AAAA,EAC9B;AAAA,EAEA,aAAa,YAA4B;AACxC,WAAO,aAAa,UAAU;AAAA,EAC/B;AAAA,EAEA,qBAAqB,cAA8B;AAClD,WAAO,aAAa,YAAY,IAAI;AAAA,EACrC;AAAA,EAEA,oBAAoB,QAAgB,UAA0B;AAC7D,WAAO,aAAa,MAAM,IAAI,MAAM,aAAa,QAAQ;AAAA,EAC1D;AAAA,EAEA,2BACC,cACA,gBACA,eACA,iBACmB;AACnB,WAAO;AAAA,MACN,aAAa,YAAY,IAAI;AAAA,MAC7B,aAAa,kBAAkB,eAAe,iBAAiB,aAAa,IAAI;AAAA,IAAA;AAAA,EAElF;AACD;"}
|
|
@@ -139,15 +139,13 @@ const acceptRelationTypeVisitor = (schema$1, entity, relation, visitor) => {
|
|
|
139
139
|
const targetRelation = targetEntity.fields[relationObj.ownedBy];
|
|
140
140
|
switch (relationObj.type) {
|
|
141
141
|
case schema.Model.RelationType.ManyHasMany:
|
|
142
|
-
return visitor.visitManyHasManyInverse(
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}
|
|
150
|
-
);
|
|
142
|
+
return visitor.visitManyHasManyInverse({
|
|
143
|
+
type: "manyHasManyInverse",
|
|
144
|
+
entity: entityObj,
|
|
145
|
+
relation: relationObj,
|
|
146
|
+
targetEntity,
|
|
147
|
+
targetRelation
|
|
148
|
+
});
|
|
151
149
|
case schema.Model.RelationType.OneHasOne:
|
|
152
150
|
return visitor.visitOneHasOneInverse({
|
|
153
151
|
type: "oneHasOneInverse",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelUtils.cjs","sources":["../../../../../packages/schema-utils/src/model/modelUtils.ts"],"sourcesContent":["import { assertNever, isIt } from '../utils'\nimport { Model } from '@contember/schema'\n\nexport enum ModelErrorCode {\n\tENTITY_NOT_FOUND = 'entityNotFound',\n\tFIELD_NOT_FOUND = 'fieldNotFound',\n\tNOT_RELATION = 'notRelation',\n\tNOT_OWNING_SIDE = 'notOwningSide',\n}\n\nexport class ModelError extends Error {\n\tconstructor(public readonly code: ModelErrorCode, message: string) {\n\t\tsuper(message)\n\t}\n}\n\nconst createEntityNotFoundError = (entityName: string) =>\n\tnew ModelError(ModelErrorCode.ENTITY_NOT_FOUND, `Entity ${entityName} not found`)\n\nconst createFieldNotFoundError = (entityName: string, fieldName: string) =>\n\tnew ModelError(ModelErrorCode.FIELD_NOT_FOUND, `Field ${fieldName} of entity ${entityName} not found`)\n\nexport const getEntity = (schema: Model.Schema, entityName: string): Model.Entity => {\n\tconst entity = schema.entities[entityName]\n\tif (!entity) {\n\t\tthrow createEntityNotFoundError(entityName)\n\t}\n\treturn entity\n}\n\nexport const getField = (entity: Model.Entity, fieldName: string): Model.AnyField => {\n\tconst field = entity.fields[fieldName]\n\tif (!field) {\n\t\tthrow createFieldNotFoundError(entity.name, fieldName)\n\t}\n\treturn field\n}\n\nexport const getColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\tvisitColumn: ({ column }) => column.columnName,\n\t\tvisitRelation: ({ entity, relation }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn relation.joiningColumn.columnName\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const tryGetColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\ttry {\n\t\treturn getColumnName(schema, entity, fieldName)\n\t} catch (e) {\n\t\tif (e instanceof ModelError && e.code === ModelErrorCode.NOT_OWNING_SIDE) {\n\t\t\treturn undefined\n\t\t}\n\t\tthrow e\n\t}\n}\n\nexport const getColumnType = (schema: Model.Schema, entity: Model.Entity, fieldName: string): string => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\t// TODO solve enum handling properly maybe we should distinguish between domain and column type\n\t\tvisitColumn: ({ column }) => (column.type === Model.ColumnType.Enum ? 'text' : column.columnType) + (column.list ? '[]' : ''),\n\t\tvisitRelation: ({ entity, relation, targetEntity }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn getColumnType(schema, targetEntity, targetEntity.primary)\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const getTargetEntity = (\n\tschema: Model.Schema,\n\tentity: Model.Entity,\n\trelationName: string,\n): Model.Entity | null => {\n\treturn acceptFieldVisitor(schema, entity, relationName, {\n\t\tvisitColumn: () => null,\n\t\tvisitRelation: ({ targetEntity }) => targetEntity,\n\t})\n}\n\nexport const acceptEveryFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tvisitor: Model.FieldVisitor<T>,\n): { [fieldName: string]: T } => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst result: { [fieldName: string]: T } = {}\n\tfor (const field in entityObj.fields) {\n\t\tresult[field] = acceptFieldVisitor(schema, entityObj, field, visitor)\n\t}\n\treturn result\n}\n\nexport const acceptFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tfield: string | Model.AnyField,\n\tvisitor: Model.FieldVisitor<T>,\n): T => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst fieldObj: Model.AnyField = typeof field === 'string' ? entityObj.fields[field] : field\n\tif (!fieldObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof field === 'string' ? field : 'unknown')\n\t}\n\n\tif (isIt<Model.AnyColumn>(fieldObj, 'columnType')) {\n\t\treturn visitor.visitColumn({\n\t\t\tentity: entityObj,\n\t\t\tcolumn: fieldObj,\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationVisitor<T>>(visitor, 'visitRelation')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitRelation.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByGenericTypeVisitor<T>>(visitor, 'visitHasMany')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitHasOne.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByTypeVisitor<T>>(visitor, 'visitManyHasManyInverse')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, visitor)\n\t}\n\n\tthrow new Error()\n}\n\nexport const acceptRelationTypeVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\trelation: string | Model.AnyRelation,\n\tvisitor: Model.RelationByTypeVisitor<T>,\n): T => {\n\tconst entityObj = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst relationObj: Model.AnyField = typeof relation === 'string' ? entityObj.fields[relation] : relation\n\tif (!relationObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof relation === 'string' ? relation : 'unknown')\n\t}\n\n\tif (!isRelation(relationObj)) {\n\t\tthrow new ModelError(\n\t\t\tModelErrorCode.NOT_RELATION,\n\t\t\t`Field ${relationObj.name} of entity ${entityObj.name} is not a relation`,\n\t\t)\n\t}\n\n\tconst targetEntity = getEntity(schema, relationObj.target)\n\n\tif (isInverseRelation(relationObj)) {\n\t\tconst targetRelation = targetEntity.fields[relationObj.ownedBy]\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyInverse({\n\t\t\t\t\ttype: 'manyHasManyInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyOwningRelation,\n\t\t\t\t},\n\t\t\t\t)\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneInverse({\n\t\t\t\t\ttype: 'oneHasOneInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneOwningRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasMany:\n\t\t\t\treturn visitor.visitOneHasMany({\n\t\t\t\t\ttype: 'oneHasMany',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasOneRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t} else if (isOwningRelation(relationObj)) {\n\t\tconst targetRelation = relationObj.inversedBy ? targetEntity.fields[relationObj.inversedBy] : null\n\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyOwning({\n\t\t\t\t\ttype: 'manyHasManyOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneOwning({\n\t\t\t\t\ttype: 'oneHasOneOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.ManyHasOne:\n\t\t\t\treturn visitor.visitManyHasOne({\n\t\t\t\t\ttype: 'manyHasOne',\n\t\t\t\t\tentity: entityObj, //\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasManyRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t}\n\n\tthrow new Error('Invalid relation type')\n}\n\nexport const isRelation = (field: Model.AnyField): field is Model.AnyRelation => {\n\treturn isIt<Model.Relation>(field, 'target')\n}\n\nexport const isInverseRelation = (relation: Model.Relation): relation is Model.InverseRelation => {\n\treturn (relation as Model.InverseRelation).ownedBy !== undefined\n}\n\nexport const isOwningRelation = (relation: Model.Relation): relation is Model.OwningRelation => {\n\treturn !isInverseRelation(relation)\n}\n\nexport const isColumn = (field: Model.AnyField): field is Model.AnyColumn => isIt<Model.AnyColumn>(field, 'columnType')\n\nexport const emptyModelSchema: Model.Schema = { entities: {}, enums: {} }\n"],"names":["ModelErrorCode","schema","entity","isIt","Model","assertNever"],"mappings":";;;;;AAGY,IAAA,mCAAAA,oBAAL;AACNA,kBAAA,kBAAmB,IAAA;AACnBA,kBAAA,iBAAkB,IAAA;AAClBA,kBAAA,cAAe,IAAA;AACfA,kBAAA,iBAAkB,IAAA;AAJPA,SAAAA;AAAA,GAAA,kBAAA,CAAA,CAAA;AAOL,MAAM,mBAAmB,MAAM;AAAA,EACrC,YAA4B,MAAsB,SAAiB;AAClE,UAAM,OAAO;AADc,SAAA,OAAA;AAAA,EAAA;AAG7B;AAEA,MAAM,4BAA4B,CAAC,eAClC,IAAI,WAAW,kBAAiC,UAAU,UAAU,YAAY;AAEjF,MAAM,2BAA2B,CAAC,YAAoB,cACrD,IAAI,WAAW,iBAAgC,SAAS,SAAS,cAAc,UAAU,YAAY;AAEzF,MAAA,YAAY,CAACC,SAAsB,eAAqC;AAC9E,QAAA,SAASA,QAAO,SAAS,UAAU;AACzC,MAAI,CAAC,QAAQ;AACZ,UAAM,0BAA0B,UAAU;AAAA,EAAA;AAEpC,SAAA;AACR;AAEa,MAAA,WAAW,CAAC,QAAsB,cAAsC;AAC9E,QAAA,QAAQ,OAAO,OAAO,SAAS;AACrC,MAAI,CAAC,OAAO;AACL,UAAA,yBAAyB,OAAO,MAAM,SAAS;AAAA,EAAA;AAE/C,SAAA;AACR;AAEO,MAAM,gBAAgB,CAACA,SAAsB,QAAsB,cAAsB;AACxF,SAAA,mBAAmBA,SAAQ,QAAQ,WAAW;AAAA,IACpD,aAAa,CAAC,EAAE,aAAa,OAAO;AAAA,IACpC,eAAe,CAAC,EAAE,QAAAC,SAAQ,eAAe;AACpC,UAAAC,KAAA,KAAkC,UAAU,eAAe,GAAG;AACjE,eAAO,SAAS,cAAc;AAAA,MAAA;AAE/B,YAAM,IAAI;AAAA,QACT;AAAA,QACA,SAAS,SAAS,IAAI,cAAcD,QAAO,IAAI;AAAA,MAChD;AAAA,IAAA;AAAA,EACD,CACA;AACF;AAEO,MAAM,mBAAmB,CAACD,SAAsB,QAAsB,cAAsB;AAC9F,MAAA;AACI,WAAA,cAAcA,SAAQ,QAAQ,SAAS;AAAA,WACtC,GAAG;AACX,QAAI,aAAa,cAAc,EAAE,SAAS,iBAAgC;AAClE,aAAA;AAAA,IAAA;AAEF,UAAA;AAAA,EAAA;AAER;AAEO,MAAM,gBAAgB,CAACA,UAAsB,QAAsB,cAA8B;AAChG,SAAA,mBAAmBA,UAAQ,QAAQ,WAAW;AAAA;AAAA,IAEpD,aAAa,CAAC,EAAE,OAAA,OAAc,OAAO,SAASG,aAAM,WAAW,OAAO,SAAS,OAAO,eAAe,OAAO,OAAO,OAAO;AAAA,IAC1H,eAAe,CAAC,EAAE,QAAAF,SAAQ,UAAU,mBAAmB;AAClD,UAAAC,KAAA,KAAkC,UAAU,eAAe,GAAG;AACjE,eAAO,cAAcF,UAAQ,cAAc,aAAa,OAAO;AAAA,MAAA;AAEhE,YAAM,IAAI;AAAA,QACT;AAAA,QACA,SAAS,SAAS,IAAI,cAAcC,QAAO,IAAI;AAAA,MAChD;AAAA,IAAA;AAAA,EACD,CACA;AACF;AAEO,MAAM,kBAAkB,CAC9BD,SACA,QACA,iBACyB;AAClB,SAAA,mBAAmBA,SAAQ,QAAQ,cAAc;AAAA,IACvD,aAAa,MAAM;AAAA,IACnB,eAAe,CAAC,EAAE,mBAAmB;AAAA,EAAA,CACrC;AACF;AAEO,MAAM,0BAA0B,CACtCA,SACA,QACA,YACgC;AAChC,QAAM,YAA0B,OAAO,WAAW,WAAW,UAAUA,SAAQ,MAAM,IAAI;AAEzF,QAAM,SAAqC,CAAC;AACjC,aAAA,SAAS,UAAU,QAAQ;AACrC,WAAO,KAAK,IAAI,mBAAmBA,SAAQ,WAAW,OAAO,OAAO;AAAA,EAAA;AAE9D,SAAA;AACR;AAEO,MAAM,qBAAqB,CACjCA,SACA,QACA,OACA,YACO;AACP,QAAM,YAA0B,OAAO,WAAW,WAAW,UAAUA,SAAQ,MAAM,IAAI;AAEzF,QAAM,WAA2B,OAAO,UAAU,WAAW,UAAU,OAAO,KAAK,IAAI;AACvF,MAAI,CAAC,UAAU;AACd,UAAM,yBAAyB,UAAU,MAAM,OAAO,UAAU,WAAW,QAAQ,SAAS;AAAA,EAAA;AAGzF,MAAAE,KAAA,KAAsB,UAAU,YAAY,GAAG;AAClD,WAAO,QAAQ,YAAY;AAAA,MAC1B,QAAQ;AAAA,MACR,QAAQ;AAAA,IAAA,CACR;AAAA,EAAA;AAGE,MAAAA,KAAA,KAAwD,SAAS,eAAe,GAAG;AAC/E,WAAA,0BAA0BF,SAAQ,WAAW,UAAU;AAAA,MAC7D,yBAAyB,QAAQ,cAAc,KAAK,OAAO;AAAA,MAC3D,wBAAwB,QAAQ,cAAc,KAAK,OAAO;AAAA,MAC1D,iBAAiB,QAAQ,cAAc,KAAK,OAAO;AAAA,MACnD,uBAAuB,QAAQ,cAAc,KAAK,OAAO;AAAA,MACzD,sBAAsB,QAAQ,cAAc,KAAK,OAAO;AAAA,MACxD,iBAAiB,QAAQ,cAAc,KAAK,OAAO;AAAA,IAAA,CACnD;AAAA,EAAA;AAGE,MAAAE,KAAA,KAAqE,SAAS,cAAc,GAAG;AAC3F,WAAA,0BAA0BF,SAAQ,WAAW,UAAU;AAAA,MAC7D,yBAAyB,QAAQ,aAAa,KAAK,OAAO;AAAA,MAC1D,wBAAwB,QAAQ,aAAa,KAAK,OAAO;AAAA,MACzD,iBAAiB,QAAQ,aAAa,KAAK,OAAO;AAAA,MAClD,uBAAuB,QAAQ,YAAY,KAAK,OAAO;AAAA,MACvD,sBAAsB,QAAQ,YAAY,KAAK,OAAO;AAAA,MACtD,iBAAiB,QAAQ,YAAY,KAAK,OAAO;AAAA,IAAA,CACjD;AAAA,EAAA;AAGE,MAAAE,KAAA,KAA8D,SAAS,yBAAyB,GAAG;AACtG,WAAO,0BAA0BF,SAAQ,WAAW,UAAU,OAAO;AAAA,EAAA;AAGtE,QAAM,IAAI,MAAM;AACjB;AAEO,MAAM,4BAA4B,CACxCA,UACA,QACA,UACA,YACO;AACP,QAAM,YAAY,OAAO,WAAW,WAAW,UAAUA,UAAQ,MAAM,IAAI;AAE3E,QAAM,cAA8B,OAAO,aAAa,WAAW,UAAU,OAAO,QAAQ,IAAI;AAChG,MAAI,CAAC,aAAa;AACjB,UAAM,yBAAyB,UAAU,MAAM,OAAO,aAAa,WAAW,WAAW,SAAS;AAAA,EAAA;AAG/F,MAAA,CAAC,WAAW,WAAW,GAAG;AAC7B,UAAM,IAAI;AAAA,MACT;AAAA,MACA,SAAS,YAAY,IAAI,cAAc,UAAU,IAAI;AAAA,IACtD;AAAA,EAAA;AAGD,QAAM,eAAe,UAAUA,UAAQ,YAAY,MAAM;AAErD,MAAA,kBAAkB,WAAW,GAAG;AACnC,UAAM,iBAAiB,aAAa,OAAO,YAAY,OAAO;AAC9D,YAAQ,YAAY,MAAM;AAAA,MACzB,KAAKG,OAAAA,MAAM,aAAa;AACvB,eAAO,QAAQ;AAAA,UAAwB;AAAA,YACtC,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,UAAU;AAAA,YACV;AAAA,YACA;AAAA,UAAA;AAAA,QAED;AAAA,MACD,KAAKA,OAAAA,MAAM,aAAa;AACvB,eAAO,QAAQ,sBAAsB;AAAA,UACpC,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,UACV;AAAA,UACA;AAAA,QAAA,CACA;AAAA,MACF,KAAKA,OAAAA,MAAM,aAAa;AACvB,eAAO,QAAQ,gBAAgB;AAAA,UAC9B,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,UACV;AAAA,UACA;AAAA,QAAA,CACA;AAAA,MACF;AACC,eAAOC,wBAAuB;AAAA,IAAA;AAAA,EAChC,WACU,iBAAiB,WAAW,GAAG;AACzC,UAAM,iBAAiB,YAAY,aAAa,aAAa,OAAO,YAAY,UAAU,IAAI;AAE9F,YAAQ,YAAY,MAAM;AAAA,MACzB,KAAKD,OAAAA,MAAM,aAAa;AACvB,eAAO,QAAQ,uBAAuB;AAAA,UACrC,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,UACV;AAAA,UACA;AAAA,QAAA,CACA;AAAA,MACF,KAAKA,OAAAA,MAAM,aAAa;AACvB,eAAO,QAAQ,qBAAqB;AAAA,UACnC,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,UACV;AAAA,UACA;AAAA,QAAA,CACA;AAAA,MACF,KAAKA,OAAAA,MAAM,aAAa;AACvB,eAAO,QAAQ,gBAAgB;AAAA,UAC9B,MAAM;AAAA,UACN,QAAQ;AAAA;AAAA,UACR,UAAU;AAAA,UACV;AAAA,UACA;AAAA,QAAA,CACA;AAAA,MACF;AACC,eAAOC,wBAAuB;AAAA,IAAA;AAAA,EAChC;AAGK,QAAA,IAAI,MAAM,uBAAuB;AACxC;AAEa,MAAA,aAAa,CAAC,UAAsD;AACzE,SAAAF,KAAA,KAAqB,OAAO,QAAQ;AAC5C;AAEa,MAAA,oBAAoB,CAAC,aAAgE;AACjG,SAAQ,SAAmC,YAAY;AACxD;AAEa,MAAA,mBAAmB,CAAC,aAA+D;AACxF,SAAA,CAAC,kBAAkB,QAAQ;AACnC;AAEO,MAAM,WAAW,CAAC,UAAoDA,KAAA,KAAsB,OAAO,YAAY;AAE/G,MAAM,mBAAiC,EAAE,UAAU,CAAI,GAAA,OAAO,CAAG,EAAA;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"modelUtils.cjs","sources":["../../../../../packages/schema-utils/src/model/modelUtils.ts"],"sourcesContent":["import { assertNever, isIt } from '../utils'\nimport { Model } from '@contember/schema'\n\nexport enum ModelErrorCode {\n\tENTITY_NOT_FOUND = 'entityNotFound',\n\tFIELD_NOT_FOUND = 'fieldNotFound',\n\tNOT_RELATION = 'notRelation',\n\tNOT_OWNING_SIDE = 'notOwningSide',\n}\n\nexport class ModelError extends Error {\n\tconstructor(public readonly code: ModelErrorCode, message: string) {\n\t\tsuper(message)\n\t}\n}\n\nconst createEntityNotFoundError = (entityName: string) => new ModelError(ModelErrorCode.ENTITY_NOT_FOUND, `Entity ${entityName} not found`)\n\nconst createFieldNotFoundError = (entityName: string, fieldName: string) =>\n\tnew ModelError(ModelErrorCode.FIELD_NOT_FOUND, `Field ${fieldName} of entity ${entityName} not found`)\n\nexport const getEntity = (schema: Model.Schema, entityName: string): Model.Entity => {\n\tconst entity = schema.entities[entityName]\n\tif (!entity) {\n\t\tthrow createEntityNotFoundError(entityName)\n\t}\n\treturn entity\n}\n\nexport const getField = (entity: Model.Entity, fieldName: string): Model.AnyField => {\n\tconst field = entity.fields[fieldName]\n\tif (!field) {\n\t\tthrow createFieldNotFoundError(entity.name, fieldName)\n\t}\n\treturn field\n}\n\nexport const getColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\tvisitColumn: ({ column }) => column.columnName,\n\t\tvisitRelation: ({ entity, relation }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn relation.joiningColumn.columnName\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const tryGetColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\ttry {\n\t\treturn getColumnName(schema, entity, fieldName)\n\t} catch (e) {\n\t\tif (e instanceof ModelError && e.code === ModelErrorCode.NOT_OWNING_SIDE) {\n\t\t\treturn undefined\n\t\t}\n\t\tthrow e\n\t}\n}\n\nexport const getColumnType = (schema: Model.Schema, entity: Model.Entity, fieldName: string): string => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\t// TODO solve enum handling properly maybe we should distinguish between domain and column type\n\t\tvisitColumn: ({ column }) => (column.type === Model.ColumnType.Enum ? 'text' : column.columnType) + (column.list ? '[]' : ''),\n\t\tvisitRelation: ({ entity, relation, targetEntity }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn getColumnType(schema, targetEntity, targetEntity.primary)\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const getTargetEntity = (\n\tschema: Model.Schema,\n\tentity: Model.Entity,\n\trelationName: string,\n): Model.Entity | null => {\n\treturn acceptFieldVisitor(schema, entity, relationName, {\n\t\tvisitColumn: () => null,\n\t\tvisitRelation: ({ targetEntity }) => targetEntity,\n\t})\n}\n\nexport const acceptEveryFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tvisitor: Model.FieldVisitor<T>,\n): { [fieldName: string]: T } => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst result: { [fieldName: string]: T } = {}\n\tfor (const field in entityObj.fields) {\n\t\tresult[field] = acceptFieldVisitor(schema, entityObj, field, visitor)\n\t}\n\treturn result\n}\n\nexport const acceptFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tfield: string | Model.AnyField,\n\tvisitor: Model.FieldVisitor<T>,\n): T => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst fieldObj: Model.AnyField = typeof field === 'string' ? entityObj.fields[field] : field\n\tif (!fieldObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof field === 'string' ? field : 'unknown')\n\t}\n\n\tif (isIt<Model.AnyColumn>(fieldObj, 'columnType')) {\n\t\treturn visitor.visitColumn({\n\t\t\tentity: entityObj,\n\t\t\tcolumn: fieldObj,\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationVisitor<T>>(visitor, 'visitRelation')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitRelation.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByGenericTypeVisitor<T>>(visitor, 'visitHasMany')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitHasOne.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByTypeVisitor<T>>(visitor, 'visitManyHasManyInverse')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, visitor)\n\t}\n\n\tthrow new Error()\n}\n\nexport const acceptRelationTypeVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\trelation: string | Model.AnyRelation,\n\tvisitor: Model.RelationByTypeVisitor<T>,\n): T => {\n\tconst entityObj = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst relationObj: Model.AnyField = typeof relation === 'string' ? entityObj.fields[relation] : relation\n\tif (!relationObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof relation === 'string' ? relation : 'unknown')\n\t}\n\n\tif (!isRelation(relationObj)) {\n\t\tthrow new ModelError(\n\t\t\tModelErrorCode.NOT_RELATION,\n\t\t\t`Field ${relationObj.name} of entity ${entityObj.name} is not a relation`,\n\t\t)\n\t}\n\n\tconst targetEntity = getEntity(schema, relationObj.target)\n\n\tif (isInverseRelation(relationObj)) {\n\t\tconst targetRelation = targetEntity.fields[relationObj.ownedBy]\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyInverse({\n\t\t\t\t\ttype: 'manyHasManyInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyOwningRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneInverse({\n\t\t\t\t\ttype: 'oneHasOneInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneOwningRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasMany:\n\t\t\t\treturn visitor.visitOneHasMany({\n\t\t\t\t\ttype: 'oneHasMany',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasOneRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t} else if (isOwningRelation(relationObj)) {\n\t\tconst targetRelation = relationObj.inversedBy ? targetEntity.fields[relationObj.inversedBy] : null\n\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyOwning({\n\t\t\t\t\ttype: 'manyHasManyOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneOwning({\n\t\t\t\t\ttype: 'oneHasOneOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.ManyHasOne:\n\t\t\t\treturn visitor.visitManyHasOne({\n\t\t\t\t\ttype: 'manyHasOne',\n\t\t\t\t\tentity: entityObj, //\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasManyRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t}\n\n\tthrow new Error('Invalid relation type')\n}\n\nexport const isRelation = (field: Model.AnyField): field is Model.AnyRelation => {\n\treturn isIt<Model.Relation>(field, 'target')\n}\n\nexport const isInverseRelation = (relation: Model.Relation): relation is Model.InverseRelation => {\n\treturn (relation as Model.InverseRelation).ownedBy !== undefined\n}\n\nexport const isOwningRelation = (relation: Model.Relation): relation is Model.OwningRelation => {\n\treturn !isInverseRelation(relation)\n}\n\nexport const isColumn = (field: Model.AnyField): field is Model.AnyColumn => isIt<Model.AnyColumn>(field, 'columnType')\n\nexport const emptyModelSchema: Model.Schema = { entities: {}, enums: {} }\n"],"names":["ModelErrorCode","schema","entity","isIt","Model","assertNever"],"mappings":"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"}
|
|
@@ -137,15 +137,13 @@ const acceptRelationTypeVisitor = (schema, entity, relation, visitor) => {
|
|
|
137
137
|
const targetRelation = targetEntity.fields[relationObj.ownedBy];
|
|
138
138
|
switch (relationObj.type) {
|
|
139
139
|
case Model.RelationType.ManyHasMany:
|
|
140
|
-
return visitor.visitManyHasManyInverse(
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
}
|
|
148
|
-
);
|
|
140
|
+
return visitor.visitManyHasManyInverse({
|
|
141
|
+
type: "manyHasManyInverse",
|
|
142
|
+
entity: entityObj,
|
|
143
|
+
relation: relationObj,
|
|
144
|
+
targetEntity,
|
|
145
|
+
targetRelation
|
|
146
|
+
});
|
|
149
147
|
case Model.RelationType.OneHasOne:
|
|
150
148
|
return visitor.visitOneHasOneInverse({
|
|
151
149
|
type: "oneHasOneInverse",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"modelUtils.js","sources":["../../../../../packages/schema-utils/src/model/modelUtils.ts"],"sourcesContent":["import { assertNever, isIt } from '../utils'\nimport { Model } from '@contember/schema'\n\nexport enum ModelErrorCode {\n\tENTITY_NOT_FOUND = 'entityNotFound',\n\tFIELD_NOT_FOUND = 'fieldNotFound',\n\tNOT_RELATION = 'notRelation',\n\tNOT_OWNING_SIDE = 'notOwningSide',\n}\n\nexport class ModelError extends Error {\n\tconstructor(public readonly code: ModelErrorCode, message: string) {\n\t\tsuper(message)\n\t}\n}\n\nconst createEntityNotFoundError = (entityName: string) =>\n\tnew ModelError(ModelErrorCode.ENTITY_NOT_FOUND, `Entity ${entityName} not found`)\n\nconst createFieldNotFoundError = (entityName: string, fieldName: string) =>\n\tnew ModelError(ModelErrorCode.FIELD_NOT_FOUND, `Field ${fieldName} of entity ${entityName} not found`)\n\nexport const getEntity = (schema: Model.Schema, entityName: string): Model.Entity => {\n\tconst entity = schema.entities[entityName]\n\tif (!entity) {\n\t\tthrow createEntityNotFoundError(entityName)\n\t}\n\treturn entity\n}\n\nexport const getField = (entity: Model.Entity, fieldName: string): Model.AnyField => {\n\tconst field = entity.fields[fieldName]\n\tif (!field) {\n\t\tthrow createFieldNotFoundError(entity.name, fieldName)\n\t}\n\treturn field\n}\n\nexport const getColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\tvisitColumn: ({ column }) => column.columnName,\n\t\tvisitRelation: ({ entity, relation }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn relation.joiningColumn.columnName\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const tryGetColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\ttry {\n\t\treturn getColumnName(schema, entity, fieldName)\n\t} catch (e) {\n\t\tif (e instanceof ModelError && e.code === ModelErrorCode.NOT_OWNING_SIDE) {\n\t\t\treturn undefined\n\t\t}\n\t\tthrow e\n\t}\n}\n\nexport const getColumnType = (schema: Model.Schema, entity: Model.Entity, fieldName: string): string => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\t// TODO solve enum handling properly maybe we should distinguish between domain and column type\n\t\tvisitColumn: ({ column }) => (column.type === Model.ColumnType.Enum ? 'text' : column.columnType) + (column.list ? '[]' : ''),\n\t\tvisitRelation: ({ entity, relation, targetEntity }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn getColumnType(schema, targetEntity, targetEntity.primary)\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const getTargetEntity = (\n\tschema: Model.Schema,\n\tentity: Model.Entity,\n\trelationName: string,\n): Model.Entity | null => {\n\treturn acceptFieldVisitor(schema, entity, relationName, {\n\t\tvisitColumn: () => null,\n\t\tvisitRelation: ({ targetEntity }) => targetEntity,\n\t})\n}\n\nexport const acceptEveryFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tvisitor: Model.FieldVisitor<T>,\n): { [fieldName: string]: T } => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst result: { [fieldName: string]: T } = {}\n\tfor (const field in entityObj.fields) {\n\t\tresult[field] = acceptFieldVisitor(schema, entityObj, field, visitor)\n\t}\n\treturn result\n}\n\nexport const acceptFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tfield: string | Model.AnyField,\n\tvisitor: Model.FieldVisitor<T>,\n): T => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst fieldObj: Model.AnyField = typeof field === 'string' ? entityObj.fields[field] : field\n\tif (!fieldObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof field === 'string' ? field : 'unknown')\n\t}\n\n\tif (isIt<Model.AnyColumn>(fieldObj, 'columnType')) {\n\t\treturn visitor.visitColumn({\n\t\t\tentity: entityObj,\n\t\t\tcolumn: fieldObj,\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationVisitor<T>>(visitor, 'visitRelation')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitRelation.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByGenericTypeVisitor<T>>(visitor, 'visitHasMany')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitHasOne.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByTypeVisitor<T>>(visitor, 'visitManyHasManyInverse')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, visitor)\n\t}\n\n\tthrow new Error()\n}\n\nexport const acceptRelationTypeVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\trelation: string | Model.AnyRelation,\n\tvisitor: Model.RelationByTypeVisitor<T>,\n): T => {\n\tconst entityObj = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst relationObj: Model.AnyField = typeof relation === 'string' ? entityObj.fields[relation] : relation\n\tif (!relationObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof relation === 'string' ? relation : 'unknown')\n\t}\n\n\tif (!isRelation(relationObj)) {\n\t\tthrow new ModelError(\n\t\t\tModelErrorCode.NOT_RELATION,\n\t\t\t`Field ${relationObj.name} of entity ${entityObj.name} is not a relation`,\n\t\t)\n\t}\n\n\tconst targetEntity = getEntity(schema, relationObj.target)\n\n\tif (isInverseRelation(relationObj)) {\n\t\tconst targetRelation = targetEntity.fields[relationObj.ownedBy]\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyInverse({\n\t\t\t\t\ttype: 'manyHasManyInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyOwningRelation,\n\t\t\t\t},\n\t\t\t\t)\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneInverse({\n\t\t\t\t\ttype: 'oneHasOneInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneOwningRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasMany:\n\t\t\t\treturn visitor.visitOneHasMany({\n\t\t\t\t\ttype: 'oneHasMany',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasOneRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t} else if (isOwningRelation(relationObj)) {\n\t\tconst targetRelation = relationObj.inversedBy ? targetEntity.fields[relationObj.inversedBy] : null\n\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyOwning({\n\t\t\t\t\ttype: 'manyHasManyOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneOwning({\n\t\t\t\t\ttype: 'oneHasOneOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.ManyHasOne:\n\t\t\t\treturn visitor.visitManyHasOne({\n\t\t\t\t\ttype: 'manyHasOne',\n\t\t\t\t\tentity: entityObj, //\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasManyRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t}\n\n\tthrow new Error('Invalid relation type')\n}\n\nexport const isRelation = (field: Model.AnyField): field is Model.AnyRelation => {\n\treturn isIt<Model.Relation>(field, 'target')\n}\n\nexport const isInverseRelation = (relation: Model.Relation): relation is Model.InverseRelation => {\n\treturn (relation as Model.InverseRelation).ownedBy !== undefined\n}\n\nexport const isOwningRelation = (relation: Model.Relation): relation is Model.OwningRelation => {\n\treturn !isInverseRelation(relation)\n}\n\nexport const isColumn = (field: Model.AnyField): field is Model.AnyColumn => isIt<Model.AnyColumn>(field, 'columnType')\n\nexport const emptyModelSchema: Model.Schema = { entities: {}, enums: {} }\n"],"names":["ModelErrorCode","entity"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"modelUtils.js","sources":["../../../../../packages/schema-utils/src/model/modelUtils.ts"],"sourcesContent":["import { assertNever, isIt } from '../utils'\nimport { Model } from '@contember/schema'\n\nexport enum ModelErrorCode {\n\tENTITY_NOT_FOUND = 'entityNotFound',\n\tFIELD_NOT_FOUND = 'fieldNotFound',\n\tNOT_RELATION = 'notRelation',\n\tNOT_OWNING_SIDE = 'notOwningSide',\n}\n\nexport class ModelError extends Error {\n\tconstructor(public readonly code: ModelErrorCode, message: string) {\n\t\tsuper(message)\n\t}\n}\n\nconst createEntityNotFoundError = (entityName: string) => new ModelError(ModelErrorCode.ENTITY_NOT_FOUND, `Entity ${entityName} not found`)\n\nconst createFieldNotFoundError = (entityName: string, fieldName: string) =>\n\tnew ModelError(ModelErrorCode.FIELD_NOT_FOUND, `Field ${fieldName} of entity ${entityName} not found`)\n\nexport const getEntity = (schema: Model.Schema, entityName: string): Model.Entity => {\n\tconst entity = schema.entities[entityName]\n\tif (!entity) {\n\t\tthrow createEntityNotFoundError(entityName)\n\t}\n\treturn entity\n}\n\nexport const getField = (entity: Model.Entity, fieldName: string): Model.AnyField => {\n\tconst field = entity.fields[fieldName]\n\tif (!field) {\n\t\tthrow createFieldNotFoundError(entity.name, fieldName)\n\t}\n\treturn field\n}\n\nexport const getColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\tvisitColumn: ({ column }) => column.columnName,\n\t\tvisitRelation: ({ entity, relation }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn relation.joiningColumn.columnName\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const tryGetColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\ttry {\n\t\treturn getColumnName(schema, entity, fieldName)\n\t} catch (e) {\n\t\tif (e instanceof ModelError && e.code === ModelErrorCode.NOT_OWNING_SIDE) {\n\t\t\treturn undefined\n\t\t}\n\t\tthrow e\n\t}\n}\n\nexport const getColumnType = (schema: Model.Schema, entity: Model.Entity, fieldName: string): string => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\t// TODO solve enum handling properly maybe we should distinguish between domain and column type\n\t\tvisitColumn: ({ column }) => (column.type === Model.ColumnType.Enum ? 'text' : column.columnType) + (column.list ? '[]' : ''),\n\t\tvisitRelation: ({ entity, relation, targetEntity }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn getColumnType(schema, targetEntity, targetEntity.primary)\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const getTargetEntity = (\n\tschema: Model.Schema,\n\tentity: Model.Entity,\n\trelationName: string,\n): Model.Entity | null => {\n\treturn acceptFieldVisitor(schema, entity, relationName, {\n\t\tvisitColumn: () => null,\n\t\tvisitRelation: ({ targetEntity }) => targetEntity,\n\t})\n}\n\nexport const acceptEveryFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tvisitor: Model.FieldVisitor<T>,\n): { [fieldName: string]: T } => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst result: { [fieldName: string]: T } = {}\n\tfor (const field in entityObj.fields) {\n\t\tresult[field] = acceptFieldVisitor(schema, entityObj, field, visitor)\n\t}\n\treturn result\n}\n\nexport const acceptFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tfield: string | Model.AnyField,\n\tvisitor: Model.FieldVisitor<T>,\n): T => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst fieldObj: Model.AnyField = typeof field === 'string' ? entityObj.fields[field] : field\n\tif (!fieldObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof field === 'string' ? field : 'unknown')\n\t}\n\n\tif (isIt<Model.AnyColumn>(fieldObj, 'columnType')) {\n\t\treturn visitor.visitColumn({\n\t\t\tentity: entityObj,\n\t\t\tcolumn: fieldObj,\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationVisitor<T>>(visitor, 'visitRelation')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitRelation.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByGenericTypeVisitor<T>>(visitor, 'visitHasMany')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitHasOne.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByTypeVisitor<T>>(visitor, 'visitManyHasManyInverse')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, visitor)\n\t}\n\n\tthrow new Error()\n}\n\nexport const acceptRelationTypeVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\trelation: string | Model.AnyRelation,\n\tvisitor: Model.RelationByTypeVisitor<T>,\n): T => {\n\tconst entityObj = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst relationObj: Model.AnyField = typeof relation === 'string' ? entityObj.fields[relation] : relation\n\tif (!relationObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof relation === 'string' ? relation : 'unknown')\n\t}\n\n\tif (!isRelation(relationObj)) {\n\t\tthrow new ModelError(\n\t\t\tModelErrorCode.NOT_RELATION,\n\t\t\t`Field ${relationObj.name} of entity ${entityObj.name} is not a relation`,\n\t\t)\n\t}\n\n\tconst targetEntity = getEntity(schema, relationObj.target)\n\n\tif (isInverseRelation(relationObj)) {\n\t\tconst targetRelation = targetEntity.fields[relationObj.ownedBy]\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyInverse({\n\t\t\t\t\ttype: 'manyHasManyInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyOwningRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneInverse({\n\t\t\t\t\ttype: 'oneHasOneInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneOwningRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasMany:\n\t\t\t\treturn visitor.visitOneHasMany({\n\t\t\t\t\ttype: 'oneHasMany',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasOneRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t} else if (isOwningRelation(relationObj)) {\n\t\tconst targetRelation = relationObj.inversedBy ? targetEntity.fields[relationObj.inversedBy] : null\n\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyOwning({\n\t\t\t\t\ttype: 'manyHasManyOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneOwning({\n\t\t\t\t\ttype: 'oneHasOneOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.ManyHasOne:\n\t\t\t\treturn visitor.visitManyHasOne({\n\t\t\t\t\ttype: 'manyHasOne',\n\t\t\t\t\tentity: entityObj, //\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasManyRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t}\n\n\tthrow new Error('Invalid relation type')\n}\n\nexport const isRelation = (field: Model.AnyField): field is Model.AnyRelation => {\n\treturn isIt<Model.Relation>(field, 'target')\n}\n\nexport const isInverseRelation = (relation: Model.Relation): relation is Model.InverseRelation => {\n\treturn (relation as Model.InverseRelation).ownedBy !== undefined\n}\n\nexport const isOwningRelation = (relation: Model.Relation): relation is Model.OwningRelation => {\n\treturn !isInverseRelation(relation)\n}\n\nexport const isColumn = (field: Model.AnyField): field is Model.AnyColumn => isIt<Model.AnyColumn>(field, 'columnType')\n\nexport const emptyModelSchema: Model.Schema = { entities: {}, enums: {} }\n"],"names":["ModelErrorCode","entity"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveDefaultColumnType.cjs","sources":["../../../../../packages/schema-utils/src/model/resolveDefaultColumnType.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { assertNever } from '../utils'\n\nexport const resolveDefaultColumnType = (type: Exclude<Model.ColumnType, Model.ColumnType.Enum>): string => {\n\tswitch (type) {\n\t\tcase Model.ColumnType.Int:\n\t\t\treturn 'integer'\n\t\tcase Model.ColumnType.Double:\n\t\t\treturn 'double precision'\n\t\tcase Model.ColumnType.String:\n\t\t\treturn 'text'\n\t\tcase Model.ColumnType.Uuid:\n\t\t\treturn 'uuid'\n\t\tcase Model.ColumnType.Bool:\n\t\t\treturn 'boolean'\n\t\tcase Model.ColumnType.DateTime:\n\t\t\treturn 'timestamptz'\n\t\tcase Model.ColumnType.Date:\n\t\t\treturn 'date'\n\t\tcase Model.ColumnType.Time:\n\t\t\treturn 'time'\n\t\tcase Model.ColumnType.Json:\n\t\t\treturn 'jsonb'\n\t\tdefault:\n\t\t\treturn assertNever(type)\n\t}\n}\n"],"names":["Model","assertNever"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"resolveDefaultColumnType.cjs","sources":["../../../../../packages/schema-utils/src/model/resolveDefaultColumnType.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { assertNever } from '../utils'\n\nexport const resolveDefaultColumnType = (type: Exclude<Model.ColumnType, Model.ColumnType.Enum>): string => {\n\tswitch (type) {\n\t\tcase Model.ColumnType.Int:\n\t\t\treturn 'integer'\n\t\tcase Model.ColumnType.Double:\n\t\t\treturn 'double precision'\n\t\tcase Model.ColumnType.String:\n\t\t\treturn 'text'\n\t\tcase Model.ColumnType.Uuid:\n\t\t\treturn 'uuid'\n\t\tcase Model.ColumnType.Bool:\n\t\t\treturn 'boolean'\n\t\tcase Model.ColumnType.DateTime:\n\t\t\treturn 'timestamptz'\n\t\tcase Model.ColumnType.Date:\n\t\t\treturn 'date'\n\t\tcase Model.ColumnType.Time:\n\t\t\treturn 'time'\n\t\tcase Model.ColumnType.Json:\n\t\t\treturn 'jsonb'\n\t\tdefault:\n\t\t\treturn assertNever(type)\n\t}\n}\n"],"names":["Model","assertNever"],"mappings":";;;;AAGO,MAAM,2BAA2B,CAAC,SAAmE;AAC3G,UAAQ,MAAA;AAAA,IACP,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAO;AAAA,IACR;AACC,aAAOC,YAAAA,YAAgB;AAAA,EAAA;AAE1B;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveDefaultColumnType.js","sources":["../../../../../packages/schema-utils/src/model/resolveDefaultColumnType.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { assertNever } from '../utils'\n\nexport const resolveDefaultColumnType = (type: Exclude<Model.ColumnType, Model.ColumnType.Enum>): string => {\n\tswitch (type) {\n\t\tcase Model.ColumnType.Int:\n\t\t\treturn 'integer'\n\t\tcase Model.ColumnType.Double:\n\t\t\treturn 'double precision'\n\t\tcase Model.ColumnType.String:\n\t\t\treturn 'text'\n\t\tcase Model.ColumnType.Uuid:\n\t\t\treturn 'uuid'\n\t\tcase Model.ColumnType.Bool:\n\t\t\treturn 'boolean'\n\t\tcase Model.ColumnType.DateTime:\n\t\t\treturn 'timestamptz'\n\t\tcase Model.ColumnType.Date:\n\t\t\treturn 'date'\n\t\tcase Model.ColumnType.Time:\n\t\t\treturn 'time'\n\t\tcase Model.ColumnType.Json:\n\t\t\treturn 'jsonb'\n\t\tdefault:\n\t\t\treturn assertNever(type)\n\t}\n}\n"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"resolveDefaultColumnType.js","sources":["../../../../../packages/schema-utils/src/model/resolveDefaultColumnType.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { assertNever } from '../utils'\n\nexport const resolveDefaultColumnType = (type: Exclude<Model.ColumnType, Model.ColumnType.Enum>): string => {\n\tswitch (type) {\n\t\tcase Model.ColumnType.Int:\n\t\t\treturn 'integer'\n\t\tcase Model.ColumnType.Double:\n\t\t\treturn 'double precision'\n\t\tcase Model.ColumnType.String:\n\t\t\treturn 'text'\n\t\tcase Model.ColumnType.Uuid:\n\t\t\treturn 'uuid'\n\t\tcase Model.ColumnType.Bool:\n\t\t\treturn 'boolean'\n\t\tcase Model.ColumnType.DateTime:\n\t\t\treturn 'timestamptz'\n\t\tcase Model.ColumnType.Date:\n\t\t\treturn 'date'\n\t\tcase Model.ColumnType.Time:\n\t\t\treturn 'time'\n\t\tcase Model.ColumnType.Json:\n\t\t\treturn 'jsonb'\n\t\tdefault:\n\t\t\treturn assertNever(type)\n\t}\n}\n"],"names":[],"mappings":";;AAGO,MAAM,2BAA2B,CAAC,SAAmE;AAC3G,UAAQ,MAAA;AAAA,IACP,KAAK,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAK,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAK,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAK,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAK,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAK,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAK,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAK,MAAM,WAAW;AACrB,aAAO;AAAA,IACR,KAAK,MAAM,WAAW;AACrB,aAAO;AAAA,IACR;AACC,aAAO,YAAgB;AAAA,EAAA;AAE1B;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemaChecksum.cjs","sources":["../../../../packages/schema-utils/src/schemaChecksum.ts"],"sourcesContent":["import { Schema } from '@contember/schema'\nimport crypto from 'node:crypto'\n\
|
|
1
|
+
{"version":3,"file":"schemaChecksum.cjs","sources":["../../../../packages/schema-utils/src/schemaChecksum.ts"],"sourcesContent":["import { Schema } from '@contember/schema'\nimport crypto from 'node:crypto'\n\nexport const calculateSchemaChecksum = (schema: Schema): string => {\n\tconst jsonSchema = JSON.stringify(schema)\n\n\treturn crypto\n\t\t.createHash('md5')\n\t\t.update(jsonSchema)\n\t\t.digest('hex')\n}\n"],"names":[],"mappings":";;;AAGO,MAAM,0BAA0B,CAAC,WAA2B;AAClE,QAAM,aAAa,KAAK,UAAU,MAAM;AAExC,SAAO,OACL,WAAW,KAAK,EAChB,OAAO,UAAU,EACjB,OAAO,KAAK;AACf;;"}
|