@osdk/maker 0.11.0-beta.9 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/CHANGELOG.md +168 -0
  2. package/build/browser/api/addDependency.js +20 -4
  3. package/build/browser/api/addDependency.js.map +1 -1
  4. package/build/browser/api/defineAction.js +7 -6
  5. package/build/browser/api/defineAction.js.map +1 -1
  6. package/build/browser/api/defineInterface.js +6 -5
  7. package/build/browser/api/defineInterface.js.map +1 -1
  8. package/build/browser/api/defineObject.js +20 -14
  9. package/build/browser/api/defineObject.js.map +1 -1
  10. package/build/browser/api/defineOntology.js +19 -13
  11. package/build/browser/api/defineOntology.js.map +1 -1
  12. package/build/browser/api/overall.test.js +1342 -718
  13. package/build/browser/api/overall.test.js.map +1 -1
  14. package/build/browser/api/types.js.map +1 -1
  15. package/build/browser/cli/main.js +1 -1
  16. package/build/browser/cli/main.js.map +1 -1
  17. package/build/cjs/index.cjs +81 -62
  18. package/build/cjs/index.cjs.map +1 -1
  19. package/build/cjs/index.d.cts +3 -2
  20. package/build/esm/api/addDependency.js +20 -4
  21. package/build/esm/api/addDependency.js.map +1 -1
  22. package/build/esm/api/defineAction.js +7 -6
  23. package/build/esm/api/defineAction.js.map +1 -1
  24. package/build/esm/api/defineInterface.js +6 -5
  25. package/build/esm/api/defineInterface.js.map +1 -1
  26. package/build/esm/api/defineObject.js +20 -14
  27. package/build/esm/api/defineObject.js.map +1 -1
  28. package/build/esm/api/defineOntology.js +19 -13
  29. package/build/esm/api/defineOntology.js.map +1 -1
  30. package/build/esm/api/overall.test.js +1342 -718
  31. package/build/esm/api/overall.test.js.map +1 -1
  32. package/build/esm/api/types.js.map +1 -1
  33. package/build/esm/cli/main.js +1 -1
  34. package/build/esm/cli/main.js.map +1 -1
  35. package/build/types/api/addDependency.d.ts +1 -1
  36. package/build/types/api/addDependency.d.ts.map +1 -1
  37. package/build/types/api/defineAction.d.ts.map +1 -1
  38. package/build/types/api/defineInterface.d.ts +1 -0
  39. package/build/types/api/defineInterface.d.ts.map +1 -1
  40. package/build/types/api/defineObject.d.ts +2 -1
  41. package/build/types/api/defineObject.d.ts.map +1 -1
  42. package/build/types/api/defineOntology.d.ts +1 -0
  43. package/build/types/api/defineOntology.d.ts.map +1 -1
  44. package/build/types/api/types.d.ts +1 -1
  45. package/build/types/api/types.d.ts.map +1 -1
  46. package/package.json +5 -5
@@ -15,7 +15,7 @@
15
15
  */
16
16
 
17
17
  import invariant from "tiny-invariant";
18
- import { extractNamespace, namespace, ontologyDefinition, updateOntology } from "./defineOntology.js";
18
+ import { addNamespaceIfNone, namespace, ontologyDefinition, updateOntology } from "./defineOntology.js";
19
19
  import { OntologyEntityTypeEnum } from "./types.js";
20
20
 
21
21
  // From https://stackoverflow.com/a/79288714
@@ -49,28 +49,24 @@ export function defineObject(objectDef) {
49
49
  !(objectDef.properties ?? []).filter(p => p.apiName === objectDef.titlePropertyApiName).every(p => !isExotic(p.type)) ? process.env.NODE_ENV !== "production" ? invariant(false, `Title property ${objectDef.titlePropertyApiName} must be a primitive type`) : invariant(false) : void 0;
50
50
  !(objectDef.properties ?? []).filter(p => p.apiName === objectDef.primaryKeyPropertyApiName).every(p => !isExotic(p.type)) ? process.env.NODE_ENV !== "production" ? invariant(false, `Primary key properties ${objectDef.primaryKeyPropertyApiName} can only be primitive types`) : invariant(false) : void 0;
51
51
  objectDef.implementsInterfaces?.forEach(interfaceImpl => {
52
- const nonExistentInterfaceProperties = interfaceImpl.propertyMapping.map(val => val.interfaceProperty).filter(interfaceProperty => interfaceImpl.implements.propertiesV2[interfaceProperty] === undefined).map(interfaceProp => ({
52
+ const allInterfaceProperties = getAllInterfaceProperties(interfaceImpl.implements);
53
+ const nonExistentInterfaceProperties = interfaceImpl.propertyMapping.map(val => val.interfaceProperty).filter(interfaceProperty => allInterfaceProperties[addNamespaceIfNone(interfaceProperty)] === undefined).map(interfaceProp => ({
53
54
  type: "invalid",
54
- reason: `Interface property ${interfaceImpl.implements.apiName}.${interfaceProp} referenced in ${objectDef.apiName} object does not exist`
55
+ reason: `Interface property ${interfaceProp} referenced in ${objectDef.apiName} object does not exist`
55
56
  }));
56
- const interfaceToObjectProperties = Object.fromEntries(interfaceImpl.propertyMapping.map(mapping => [mapping.interfaceProperty, mapping.mapsTo]));
57
+ const interfaceToObjectProperties = Object.fromEntries(interfaceImpl.propertyMapping.map(mapping => [addNamespaceIfNone(mapping.interfaceProperty), mapping.mapsTo]));
57
58
  const validateProperty = interfaceProp => {
58
- if (interfaceProp[1].sharedPropertyType.nonNameSpacedApiName in interfaceToObjectProperties) {
59
+ if (interfaceProp[1].sharedPropertyType.apiName in interfaceToObjectProperties) {
59
60
  return validateInterfaceImplProperty(interfaceProp[1].sharedPropertyType, interfaceToObjectProperties[interfaceProp[0]], objectDef);
60
61
  }
61
62
  return {
62
63
  type: "invalid",
63
- reason: `Interface property ${interfaceImpl.implements.apiName}.${interfaceProp[1].sharedPropertyType.nonNameSpacedApiName} not implemented by ${objectDef.apiName} object definition`
64
+ reason: `Interface property ${interfaceProp[1].sharedPropertyType.apiName} not implemented by ${objectDef.apiName} object definition`
64
65
  };
65
66
  };
66
- const baseValidations = Object.entries(interfaceImpl.implements.propertiesV2).map(validateProperty);
67
- const extendsValidations = interfaceImpl.implements.extendsInterfaces.flatMap(interfaceType => Object.entries(interfaceType.propertiesV2).map(validateProperty));
68
- const allFailedValidations = baseValidations.concat(extendsValidations, nonExistentInterfaceProperties).filter(val => val.type === "invalid");
67
+ const validations = Object.entries(getAllInterfaceProperties(interfaceImpl.implements)).map(validateProperty);
68
+ const allFailedValidations = validations.concat(nonExistentInterfaceProperties).filter(val => val.type === "invalid");
69
69
  !(allFailedValidations.length === 0) ? process.env.NODE_ENV !== "production" ? invariant(false, "\n" + allFailedValidations.map(formatValidationErrors).join("\n")) : invariant(false) : void 0;
70
- interfaceImpl.propertyMapping = interfaceImpl.propertyMapping.map(mapping => ({
71
- interfaceProperty: extractNamespace(interfaceImpl.implements.apiName) + mapping.interfaceProperty,
72
- mapsTo: mapping.mapsTo
73
- }));
74
70
  });
75
71
  const finalObject = {
76
72
  ...objectDef,
@@ -101,7 +97,7 @@ function validateInterfaceImplProperty(spt, mappedObjectProp, object) {
101
97
  reason: `Object property mapped to interface does not exist. Object Property Mapped: ${mappedObjectProp}`
102
98
  };
103
99
  }
104
- if (spt.type !== objProp?.type) {
100
+ if (JSON.stringify(spt.type) !== JSON.stringify(objProp?.type)) {
105
101
  return {
106
102
  type: "invalid",
107
103
  reason: `Object property type does not match the interface property it is mapped to. Interface Property: ${spt.apiName}, objectProperty: ${mappedObjectProp}`
@@ -119,4 +115,14 @@ export function convertToDisplayName(s) {
119
115
  export function convertToPluralDisplayName(s) {
120
116
  return s === undefined || s == null ? "" : s.endsWith("s") ? convertToDisplayName(s) : convertToDisplayName(s) + "s";
121
117
  }
118
+ export function getAllInterfaceProperties(interfaceType) {
119
+ let properties = interfaceType.propertiesV2;
120
+ interfaceType.extendsInterfaces.forEach(ext => {
121
+ properties = {
122
+ ...properties,
123
+ ...getAllInterfaceProperties(ext)
124
+ };
125
+ });
126
+ return properties;
127
+ }
122
128
  //# sourceMappingURL=defineObject.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"defineObject.js","names":["invariant","extractNamespace","namespace","ontologyDefinition","updateOntology","OntologyEntityTypeEnum","ISO_8601_DURATION","ISO_8601_DATETIME","defineObject","objectDef","apiName","propertyApiNames","properties","map","val","OBJECT_TYPE","undefined","Error","includes","titlePropertyApiName","process","env","NODE_ENV","primaryKeyPropertyApiName","filter","p","every","editOnly","retentionPeriod","datasource","test","status","activeProperties","property","length","join","type","deadline","isExotic","implementsInterfaces","forEach","interfaceImpl","nonExistentInterfaceProperties","propertyMapping","interfaceProperty","implements","propertiesV2","interfaceProp","reason","interfaceToObjectProperties","Object","fromEntries","mapping","mapsTo","validateProperty","sharedPropertyType","nonNameSpacedApiName","validateInterfaceImplProperty","baseValidations","entries","extendsValidations","extendsInterfaces","flatMap","interfaceType","allFailedValidations","concat","formatValidationErrors","finalObject","__type","error","spt","mappedObjectProp","object","objProp","find","prop","convertToDisplayName","s","charAt","toUpperCase","slice","convertToPluralDisplayName","endsWith"],"sources":["defineObject.ts"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport invariant from \"tiny-invariant\";\nimport {\n extractNamespace,\n namespace,\n ontologyDefinition,\n updateOntology,\n} from \"./defineOntology.js\";\nimport type {\n InterfacePropertyType,\n ObjectType,\n ObjectTypeDefinition,\n PropertyTypeType,\n PropertyTypeTypeExotic,\n SharedPropertyType,\n} from \"./types.js\";\nimport { OntologyEntityTypeEnum } from \"./types.js\";\n\n// From https://stackoverflow.com/a/79288714\nconst ISO_8601_DURATION =\n /^P(?!$)(?:(?:((?:\\d+Y)|(?:\\d+(?:\\.|,)\\d+Y$))?((?:\\d+M)|(?:\\d+(?:\\.|,)\\d+M$))?((?:\\d+D)|(?:\\d+(?:\\.|,)\\d+D$))?(T((?:\\d+H)|(?:\\d+(?:\\.|,)\\d+H$))?((?:\\d+M)|(?:\\d+(?:\\.|,)\\d+M$))?((?:\\d+S)|(?:\\d+(?:\\.|,)\\d+S$))?)?)|(?:\\d+(?:(?:\\.|,)\\d+)?W))$/;\n\n// ISO 8601 date and time format (YYYY-MM-DDThh:mm:ss.sssZ)\nconst ISO_8601_DATETIME =\n /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})?)?$/;\n\nexport function defineObject(\n objectDef: ObjectTypeDefinition,\n): ObjectType {\n const apiName = namespace + objectDef.apiName;\n const propertyApiNames = (objectDef.properties ?? []).map(val => val.apiName);\n if (\n ontologyDefinition[OntologyEntityTypeEnum.OBJECT_TYPE][apiName]\n !== undefined\n ) {\n throw new Error(\n `Object type with apiName ${objectDef.apiName} is already defined`,\n );\n }\n invariant(\n propertyApiNames.includes(objectDef.titlePropertyApiName),\n `Title property ${objectDef.titlePropertyApiName} is not defined on object ${objectDef.apiName}`,\n );\n invariant(\n propertyApiNames.includes(objectDef.primaryKeyPropertyApiName),\n `Primary key property ${objectDef.primaryKeyPropertyApiName} does not exist on object ${objectDef.apiName}`,\n );\n\n invariant(\n (objectDef.properties ?? []).filter(p =>\n p.apiName === objectDef.primaryKeyPropertyApiName\n ).every(p => !p.editOnly),\n `Primary key property ${objectDef.primaryKeyPropertyApiName} on object ${objectDef.apiName} cannot be edit-only`,\n );\n\n const retentionPeriod = (objectDef.datasource as any)?.retentionPeriod;\n invariant(\n retentionPeriod === undefined || ISO_8601_DURATION.test(retentionPeriod),\n `Retention period \"${retentionPeriod}\" on object \"${objectDef.apiName}\" is not a valid ISO 8601 duration string`,\n );\n\n // Validate that if object status is experimental, no property can have a status of active\n if (objectDef.status === \"experimental\") {\n const activeProperties = (objectDef.properties ?? [])\n .filter(property => property.status === \"active\")\n .map(property => property.apiName);\n\n invariant(\n activeProperties.length === 0,\n `When object \"${objectDef.apiName}\" has experimental status, no properties can have \"active\" status, but found active properties: ${\n activeProperties.join(\", \")\n }`,\n );\n }\n\n // Validate deprecated status deadline is in ISO 8601 format\n if (\n objectDef.status && typeof objectDef.status === \"object\"\n && objectDef.status.type === \"deprecated\"\n ) {\n const deadline = objectDef.status.deadline;\n invariant(\n deadline !== undefined && ISO_8601_DATETIME.test(deadline),\n `Deprecated status deadline \"${deadline}\" on object \"${objectDef.apiName}\" is not a valid ISO 8601 datetime string`,\n );\n }\n invariant(\n (objectDef.properties ?? []).filter(p =>\n p.apiName === objectDef.titlePropertyApiName\n ).every(p => !isExotic(p.type)),\n `Title property ${objectDef.titlePropertyApiName} must be a primitive type`,\n );\n invariant(\n (objectDef.properties ?? []).filter(p =>\n p.apiName === objectDef.primaryKeyPropertyApiName\n ).every(p => !isExotic(p.type)),\n `Primary key properties ${objectDef.primaryKeyPropertyApiName} can only be primitive types`,\n );\n\n objectDef.implementsInterfaces?.forEach(interfaceImpl => {\n const nonExistentInterfaceProperties: ValidationResult[] = interfaceImpl\n .propertyMapping.map(val => val.interfaceProperty).filter(\n interfaceProperty =>\n interfaceImpl.implements.propertiesV2[interfaceProperty]\n === undefined,\n ).map(interfaceProp => ({\n type: \"invalid\",\n reason:\n `Interface property ${interfaceImpl.implements.apiName}.${interfaceProp} referenced in ${objectDef.apiName} object does not exist`,\n }));\n\n const interfaceToObjectProperties = Object.fromEntries(\n interfaceImpl.propertyMapping.map(\n mapping => [mapping.interfaceProperty, mapping.mapsTo],\n ),\n );\n const validateProperty = (\n interfaceProp: [string, InterfacePropertyType],\n ): ValidationResult => {\n if (\n interfaceProp[1].sharedPropertyType.nonNameSpacedApiName\n in interfaceToObjectProperties\n ) {\n return validateInterfaceImplProperty(\n interfaceProp[1].sharedPropertyType,\n interfaceToObjectProperties[interfaceProp[0]],\n objectDef,\n );\n }\n return {\n type: \"invalid\",\n reason: `Interface property ${interfaceImpl.implements.apiName}.${\n interfaceProp[1].sharedPropertyType.nonNameSpacedApiName\n } not implemented by ${objectDef.apiName} object definition`,\n };\n };\n const baseValidations = Object.entries(\n interfaceImpl.implements.propertiesV2,\n )\n .map<ValidationResult>(validateProperty);\n const extendsValidations = interfaceImpl.implements.extendsInterfaces\n .flatMap(interfaceType =>\n Object.entries(interfaceType.propertiesV2).map(validateProperty)\n );\n\n const allFailedValidations = baseValidations.concat(\n extendsValidations,\n nonExistentInterfaceProperties,\n ).filter(val => val.type === \"invalid\");\n invariant(\n allFailedValidations.length === 0,\n \"\\n\" + allFailedValidations.map(formatValidationErrors).join(\"\\n\"),\n );\n\n interfaceImpl.propertyMapping = interfaceImpl.propertyMapping.map((\n mapping,\n ) => ({\n interfaceProperty: extractNamespace(interfaceImpl.implements.apiName)\n + mapping.interfaceProperty,\n mapsTo: mapping.mapsTo,\n }));\n });\n\n const finalObject: ObjectType = {\n ...objectDef,\n apiName: apiName,\n __type: OntologyEntityTypeEnum.OBJECT_TYPE,\n };\n updateOntology(finalObject);\n return finalObject;\n}\n\nexport function isExotic(\n type: PropertyTypeType,\n): type is PropertyTypeTypeExotic {\n if (typeof type === \"string\") {\n return [\"geopoint\", \"geoshape\", \"mediaReference\", \"geotimeSeries\"].includes(\n type,\n );\n } else if (typeof type === \"object\" && type != null) {\n return type.type === \"marking\" || type.type === \"struct\";\n }\n return false;\n}\n\ntype ValidationResult = { type: \"valid\" } | { type: \"invalid\"; reason: string };\n\nfunction formatValidationErrors(\n error: { type: \"invalid\"; reason: string },\n): string {\n return `Ontology Definition Error: ${error.reason}\\n`;\n}\n\n// Validate that the object and the interface property match up\nfunction validateInterfaceImplProperty(\n spt: SharedPropertyType,\n mappedObjectProp: string,\n object: ObjectTypeDefinition,\n): ValidationResult {\n const objProp = object.properties?.find(prop =>\n prop.apiName === mappedObjectProp\n );\n if (objProp === undefined) {\n return {\n type: \"invalid\",\n reason:\n `Object property mapped to interface does not exist. Object Property Mapped: ${mappedObjectProp}`,\n };\n }\n if (spt.type !== objProp?.type) {\n return {\n type: \"invalid\",\n reason:\n `Object property type does not match the interface property it is mapped to. Interface Property: ${spt.apiName}, objectProperty: ${mappedObjectProp}`,\n };\n }\n\n return { type: \"valid\" };\n}\n\nexport function convertToDisplayName(s: string | undefined | null): string {\n return s === undefined || s == null\n ? \"\"\n : s.charAt(0).toUpperCase() + s.slice(1);\n}\n\n// TODO: edge cases\nexport function convertToPluralDisplayName(\n s: string | undefined | null,\n): string {\n return s === undefined || s == null\n ? \"\"\n : s.endsWith(\"s\")\n ? convertToDisplayName(s)\n : convertToDisplayName(s) + \"s\";\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"defineObject.js","names":["invariant","addNamespaceIfNone","namespace","ontologyDefinition","updateOntology","OntologyEntityTypeEnum","ISO_8601_DURATION","ISO_8601_DATETIME","defineObject","objectDef","apiName","propertyApiNames","properties","map","val","OBJECT_TYPE","undefined","Error","includes","titlePropertyApiName","process","env","NODE_ENV","primaryKeyPropertyApiName","filter","p","every","editOnly","retentionPeriod","datasource","test","status","activeProperties","property","length","join","type","deadline","isExotic","implementsInterfaces","forEach","interfaceImpl","allInterfaceProperties","getAllInterfaceProperties","implements","nonExistentInterfaceProperties","propertyMapping","interfaceProperty","interfaceProp","reason","interfaceToObjectProperties","Object","fromEntries","mapping","mapsTo","validateProperty","sharedPropertyType","validateInterfaceImplProperty","validations","entries","allFailedValidations","concat","formatValidationErrors","finalObject","__type","error","spt","mappedObjectProp","object","objProp","find","prop","JSON","stringify","convertToDisplayName","s","charAt","toUpperCase","slice","convertToPluralDisplayName","endsWith","interfaceType","propertiesV2","extendsInterfaces","ext"],"sources":["defineObject.ts"],"sourcesContent":["/*\n * Copyright 2024 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport invariant from \"tiny-invariant\";\nimport {\n addNamespaceIfNone,\n namespace,\n ontologyDefinition,\n updateOntology,\n} from \"./defineOntology.js\";\nimport type {\n InterfacePropertyType,\n InterfaceType,\n ObjectType,\n ObjectTypeDefinition,\n PropertyTypeType,\n PropertyTypeTypeExotic,\n SharedPropertyType,\n} from \"./types.js\";\nimport { OntologyEntityTypeEnum } from \"./types.js\";\n\n// From https://stackoverflow.com/a/79288714\nconst ISO_8601_DURATION =\n /^P(?!$)(?:(?:((?:\\d+Y)|(?:\\d+(?:\\.|,)\\d+Y$))?((?:\\d+M)|(?:\\d+(?:\\.|,)\\d+M$))?((?:\\d+D)|(?:\\d+(?:\\.|,)\\d+D$))?(T((?:\\d+H)|(?:\\d+(?:\\.|,)\\d+H$))?((?:\\d+M)|(?:\\d+(?:\\.|,)\\d+M$))?((?:\\d+S)|(?:\\d+(?:\\.|,)\\d+S$))?)?)|(?:\\d+(?:(?:\\.|,)\\d+)?W))$/;\n\n// ISO 8601 date and time format (YYYY-MM-DDThh:mm:ss.sssZ)\nconst ISO_8601_DATETIME =\n /^\\d{4}-\\d{2}-\\d{2}(T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?(Z|[+-]\\d{2}:\\d{2})?)?$/;\n\nexport function defineObject(\n objectDef: ObjectTypeDefinition,\n): ObjectType {\n const apiName = namespace + objectDef.apiName;\n const propertyApiNames = (objectDef.properties ?? []).map(val => val.apiName);\n if (\n ontologyDefinition[OntologyEntityTypeEnum.OBJECT_TYPE][apiName]\n !== undefined\n ) {\n throw new Error(\n `Object type with apiName ${objectDef.apiName} is already defined`,\n );\n }\n invariant(\n propertyApiNames.includes(objectDef.titlePropertyApiName),\n `Title property ${objectDef.titlePropertyApiName} is not defined on object ${objectDef.apiName}`,\n );\n invariant(\n propertyApiNames.includes(objectDef.primaryKeyPropertyApiName),\n `Primary key property ${objectDef.primaryKeyPropertyApiName} does not exist on object ${objectDef.apiName}`,\n );\n\n invariant(\n (objectDef.properties ?? []).filter(p =>\n p.apiName === objectDef.primaryKeyPropertyApiName\n ).every(p => !p.editOnly),\n `Primary key property ${objectDef.primaryKeyPropertyApiName} on object ${objectDef.apiName} cannot be edit-only`,\n );\n\n const retentionPeriod = (objectDef.datasource as any)?.retentionPeriod;\n invariant(\n retentionPeriod === undefined || ISO_8601_DURATION.test(retentionPeriod),\n `Retention period \"${retentionPeriod}\" on object \"${objectDef.apiName}\" is not a valid ISO 8601 duration string`,\n );\n\n // Validate that if object status is experimental, no property can have a status of active\n if (objectDef.status === \"experimental\") {\n const activeProperties = (objectDef.properties ?? [])\n .filter(property => property.status === \"active\")\n .map(property => property.apiName);\n\n invariant(\n activeProperties.length === 0,\n `When object \"${objectDef.apiName}\" has experimental status, no properties can have \"active\" status, but found active properties: ${\n activeProperties.join(\", \")\n }`,\n );\n }\n\n // Validate deprecated status deadline is in ISO 8601 format\n if (\n objectDef.status && typeof objectDef.status === \"object\"\n && objectDef.status.type === \"deprecated\"\n ) {\n const deadline = objectDef.status.deadline;\n invariant(\n deadline !== undefined && ISO_8601_DATETIME.test(deadline),\n `Deprecated status deadline \"${deadline}\" on object \"${objectDef.apiName}\" is not a valid ISO 8601 datetime string`,\n );\n }\n invariant(\n (objectDef.properties ?? []).filter(p =>\n p.apiName === objectDef.titlePropertyApiName\n ).every(p => !isExotic(p.type)),\n `Title property ${objectDef.titlePropertyApiName} must be a primitive type`,\n );\n invariant(\n (objectDef.properties ?? []).filter(p =>\n p.apiName === objectDef.primaryKeyPropertyApiName\n ).every(p => !isExotic(p.type)),\n `Primary key properties ${objectDef.primaryKeyPropertyApiName} can only be primitive types`,\n );\n\n objectDef.implementsInterfaces?.forEach(interfaceImpl => {\n const allInterfaceProperties = getAllInterfaceProperties(\n interfaceImpl.implements,\n );\n const nonExistentInterfaceProperties: ValidationResult[] = interfaceImpl\n .propertyMapping.map(val => val.interfaceProperty).filter(\n interfaceProperty =>\n allInterfaceProperties[addNamespaceIfNone(interfaceProperty)]\n === undefined,\n ).map(interfaceProp => ({\n type: \"invalid\",\n reason:\n `Interface property ${interfaceProp} referenced in ${objectDef.apiName} object does not exist`,\n }));\n\n const interfaceToObjectProperties = Object.fromEntries(\n interfaceImpl.propertyMapping.map(\n mapping => [\n addNamespaceIfNone(mapping.interfaceProperty),\n mapping.mapsTo,\n ],\n ),\n );\n const validateProperty = (\n interfaceProp: [string, InterfacePropertyType],\n ): ValidationResult => {\n if (\n interfaceProp[1].sharedPropertyType.apiName\n in interfaceToObjectProperties\n ) {\n return validateInterfaceImplProperty(\n interfaceProp[1].sharedPropertyType,\n interfaceToObjectProperties[interfaceProp[0]],\n objectDef,\n );\n }\n return {\n type: \"invalid\",\n reason: `Interface property ${\n interfaceProp[1].sharedPropertyType.apiName\n } not implemented by ${objectDef.apiName} object definition`,\n };\n };\n const validations = Object.entries(\n getAllInterfaceProperties(interfaceImpl.implements),\n ).map(validateProperty);\n const allFailedValidations = validations.concat(\n nonExistentInterfaceProperties,\n ).filter(val => val.type === \"invalid\");\n invariant(\n allFailedValidations.length === 0,\n \"\\n\" + allFailedValidations.map(formatValidationErrors).join(\"\\n\"),\n );\n });\n\n const finalObject: ObjectType = {\n ...objectDef,\n apiName: apiName,\n __type: OntologyEntityTypeEnum.OBJECT_TYPE,\n };\n updateOntology(finalObject);\n return finalObject;\n}\n\nexport function isExotic(\n type: PropertyTypeType,\n): type is PropertyTypeTypeExotic {\n if (typeof type === \"string\") {\n return [\"geopoint\", \"geoshape\", \"mediaReference\", \"geotimeSeries\"].includes(\n type,\n );\n } else if (typeof type === \"object\" && type != null) {\n return type.type === \"marking\" || type.type === \"struct\";\n }\n return false;\n}\n\ntype ValidationResult = { type: \"valid\" } | { type: \"invalid\"; reason: string };\n\nfunction formatValidationErrors(\n error: { type: \"invalid\"; reason: string },\n): string {\n return `Ontology Definition Error: ${error.reason}\\n`;\n}\n\n// Validate that the object and the interface property match up\nfunction validateInterfaceImplProperty(\n spt: SharedPropertyType,\n mappedObjectProp: string,\n object: ObjectTypeDefinition,\n): ValidationResult {\n const objProp = object.properties?.find(prop =>\n prop.apiName === mappedObjectProp\n );\n if (objProp === undefined) {\n return {\n type: \"invalid\",\n reason:\n `Object property mapped to interface does not exist. Object Property Mapped: ${mappedObjectProp}`,\n };\n }\n if (JSON.stringify(spt.type) !== JSON.stringify(objProp?.type)) {\n return {\n type: \"invalid\",\n reason:\n `Object property type does not match the interface property it is mapped to. Interface Property: ${spt.apiName}, objectProperty: ${mappedObjectProp}`,\n };\n }\n\n return { type: \"valid\" };\n}\n\nexport function convertToDisplayName(s: string | undefined | null): string {\n return s === undefined || s == null\n ? \"\"\n : s.charAt(0).toUpperCase() + s.slice(1);\n}\n\n// TODO: edge cases\nexport function convertToPluralDisplayName(\n s: string | undefined | null,\n): string {\n return s === undefined || s == null\n ? \"\"\n : s.endsWith(\"s\")\n ? convertToDisplayName(s)\n : convertToDisplayName(s) + \"s\";\n}\n\nexport function getAllInterfaceProperties(\n interfaceType: InterfaceType,\n): Record<string, InterfacePropertyType> {\n let properties = interfaceType.propertiesV2;\n interfaceType.extendsInterfaces.forEach(ext => {\n properties = { ...properties, ...getAllInterfaceProperties(ext) };\n });\n return properties;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -17,7 +17,6 @@
17
17
  import * as fs from "fs";
18
18
  import * as path from "path";
19
19
  import invariant from "tiny-invariant";
20
- import { fileURLToPath } from "url";
21
20
  import { isExotic } from "./defineObject.js";
22
21
  import { convertNullabilityToDataConstraint, convertType, convertValueType, convertValueTypeDataConstraints, defaultTypeClasses, getPropertyTypeName, hasRenderHints, shouldNotHaveRenderHints } from "./propertyConversionUtils.js";
23
22
  import { OntologyEntityTypeEnum } from "./types.js";
@@ -194,7 +193,7 @@ function convertToWireImportedTypes(importedTypes) {
194
193
  apiName: i.interfaceType.apiName,
195
194
  displayName: i.interfaceType.displayMetadata.displayName,
196
195
  description: i.interfaceType.displayMetadata.description,
197
- properties: Object.values(i.interfaceType.allPropertiesV2).map(p => ({
196
+ properties: Object.values(i.interfaceType.propertiesV2).map(p => ({
198
197
  apiName: p.sharedPropertyType.apiName,
199
198
  displayName: p.sharedPropertyType.displayMetadata.displayName,
200
199
  description: p.sharedPropertyType.displayMetadata.description,
@@ -313,7 +312,7 @@ function convertObject(objectType) {
313
312
  redacted: false,
314
313
  implementsInterfaces2: implementations.map(impl => ({
315
314
  interfaceTypeApiName: impl.implements.apiName,
316
- properties: Object.fromEntries(impl.propertyMapping.map(mapping => [mapping.interfaceProperty, {
315
+ properties: Object.fromEntries(impl.propertyMapping.map(mapping => [addNamespaceIfNone(mapping.interfaceProperty), {
317
316
  propertyTypeRid: mapping.mapsTo
318
317
  }]))
319
318
  })),
@@ -446,7 +445,12 @@ function convertProperty(property) {
446
445
  indexedForSearch: property.indexedForSearch ?? true,
447
446
  ruleSetBinding: undefined,
448
447
  baseFormatter: property.baseFormatter,
449
- type: convertType(property.type),
448
+ type: property.array ? {
449
+ type: "array",
450
+ array: {
451
+ subtype: convertType(property.type)
452
+ }
453
+ } : convertType(property.type),
450
454
  typeClasses: property.typeClasses ?? (shouldNotHaveRenderHints(property.type) ? [] : defaultTypeClasses),
451
455
  status: convertObjectStatus(property.status),
452
456
  inlineAction: undefined,
@@ -585,6 +589,9 @@ function convertInterface(interfaceType) {
585
589
  allLinks: [],
586
590
  allProperties: [],
587
591
  allPropertiesV2: {},
592
+ // TODO(mwalther): Support propertiesV3
593
+ propertiesV3: {},
594
+ allPropertiesV3: {},
588
595
  properties: []
589
596
  };
590
597
  }
@@ -731,6 +738,7 @@ function convertActionValidation(action) {
731
738
  },
732
739
  parameterValidations: Object.fromEntries((action.parameters ?? []).map(p => {
733
740
  return [p.id, {
741
+ conditionalOverrides: [],
734
742
  defaultValidation: {
735
743
  display: {
736
744
  renderHint: renderHintFromBaseType(p),
@@ -1039,14 +1047,12 @@ function writeDependencyFile(dependencyFile) {
1039
1047
  }
1040
1048
  function dependencyInjectionString() {
1041
1049
  const namespaceNoDot = namespace.endsWith(".") ? namespace.slice(0, -1) : namespace;
1042
- const currentFilePath = fileURLToPath(import.meta.url);
1043
- let packageJsonDirPath = path.join(currentFilePath, "..", "..", "..");
1044
- if (!currentFilePath.endsWith(".ts")) {
1045
- packageJsonDirPath = path.join(packageJsonDirPath, "..");
1046
- }
1047
- const packageJsonFilePath = path.join(packageJsonDirPath, "package.json");
1048
- const packageJson = JSON.parse(fs.readFileSync(packageJsonFilePath, "utf-8"));
1049
- const currentPackageVersion = packageJson.version ?? "";
1050
- return `import { addDependency } from '@osdk/maker';\n\naddDependency("${namespaceNoDot}", "${currentPackageVersion}");\n`;
1050
+ return `import { addDependency } from "@osdk/maker";
1051
+
1052
+ addDependency("${namespaceNoDot}", new URL(import.meta.url).pathname);
1053
+ `;
1054
+ }
1055
+ export function addNamespaceIfNone(apiName) {
1056
+ return apiName.includes(".") ? apiName : namespace + apiName;
1051
1057
  }
1052
1058
  //# sourceMappingURL=defineOntology.js.map