@itwin/ecschema-locaters 4.6.0-dev.9 → 4.6.1
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/CHANGELOG.md +23 -1
- package/lib/cjs/SchemaFileLocater.js +3 -3
- package/lib/cjs/SchemaFileLocater.js.map +1 -1
- package/lib/cjs/SchemaStringLocater.js.map +1 -1
- package/lib/cjs/SchemaXml.js +1 -1
- package/lib/cjs/SchemaXml.js.map +1 -1
- package/lib/cjs/StubSchemaXmlFileLocater.js.map +1 -1
- package/lib/cjs/test/ConcurrentGetSchemaJson.test.js +86 -0
- package/lib/cjs/test/ConcurrentGetSchemaJson.test.js.map +1 -1
- package/lib/cjs/test/ConcurrentGetSchemaXml.test.js +78 -0
- package/lib/cjs/test/ConcurrentGetSchemaXml.test.js.map +1 -1
- package/lib/cjs/test/SchemaJsonFileLocator.test.js.map +1 -1
- package/lib/cjs/test/SchemaXmlFileLocator.test.js.map +1 -1
- package/lib/cjs/test/SchemaXmlStringLocater.test.js +3 -3
- package/lib/cjs/test/SchemaXmlStringLocater.test.js.map +1 -1
- package/package.json +8 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,23 @@
|
|
|
1
1
|
# Change Log - @itwin/ecschema-locaters
|
|
2
2
|
|
|
3
|
-
This log was last generated on Wed,
|
|
3
|
+
This log was last generated on Wed, 29 May 2024 14:35:17 GMT and should not be manually modified.
|
|
4
|
+
|
|
5
|
+
## 4.6.1
|
|
6
|
+
Wed, 29 May 2024 14:35:17 GMT
|
|
7
|
+
|
|
8
|
+
_Version update only_
|
|
9
|
+
|
|
10
|
+
## 4.6.0
|
|
11
|
+
Mon, 13 May 2024 20:32:51 GMT
|
|
12
|
+
|
|
13
|
+
### Updates
|
|
14
|
+
|
|
15
|
+
- Update glob package to latest version
|
|
16
|
+
|
|
17
|
+
## 4.5.2
|
|
18
|
+
Tue, 16 Apr 2024 14:46:22 GMT
|
|
19
|
+
|
|
20
|
+
_Version update only_
|
|
4
21
|
|
|
5
22
|
## 4.5.1
|
|
6
23
|
Wed, 03 Apr 2024 18:26:58 GMT
|
|
@@ -14,6 +31,11 @@ Tue, 02 Apr 2024 19:06:00 GMT
|
|
|
14
31
|
|
|
15
32
|
- Units v1.0.8 schema is released which introduces a new unit - Decanewton (daN)
|
|
16
33
|
|
|
34
|
+
## 4.4.9
|
|
35
|
+
Mon, 15 Apr 2024 20:29:22 GMT
|
|
36
|
+
|
|
37
|
+
_Version update only_
|
|
38
|
+
|
|
17
39
|
## 4.4.8
|
|
18
40
|
Mon, 25 Mar 2024 22:22:26 GMT
|
|
19
41
|
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
10
|
exports.SchemaFileLocater = exports.FileSchemaKey = void 0;
|
|
11
11
|
const fs = require("fs");
|
|
12
|
-
const
|
|
12
|
+
const glob_1 = require("glob");
|
|
13
13
|
const path = require("path");
|
|
14
14
|
const ecschema_metadata_1 = require("@itwin/ecschema-metadata");
|
|
15
15
|
const formatString = (format, ...args) => {
|
|
@@ -151,8 +151,8 @@ class SchemaFileLocater {
|
|
|
151
151
|
*/
|
|
152
152
|
addCandidateSchemaKeys(foundFiles, schemaPath, fileFilter, desiredKey, matchType, format) {
|
|
153
153
|
const fullPath = path.join(schemaPath, fileFilter);
|
|
154
|
-
const result =
|
|
155
|
-
for (const match of result
|
|
154
|
+
const result = (0, glob_1.globSync)(fullPath, { windowsPathsNoEscape: true });
|
|
155
|
+
for (const match of result) {
|
|
156
156
|
let fileName = path.basename(match, (`.ecschema.${format}`));
|
|
157
157
|
// TODO: should this be moved or handled elsewhere?
|
|
158
158
|
// Handles two version file names - SchemaKey.parseString supports only 3 version names.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaFileLocater.js","sourceRoot":"","sources":["../../src/SchemaFileLocater.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,yBAAyB;AACzB,6BAA6B;AAC7B,6BAA6B;AAC7B,gEAA6F;AAE7F,MAAM,YAAY,GAAG,CAAC,MAAc,EAAE,GAAG,IAAc,EAAE,EAAE;IACzD,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;QACrD,OAAO,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,WAAW;YAC3C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;YACjB,CAAC,CAAC,KAAK,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,GAAW,EAAE,YAAoB,EAAE,SAAiB,EAAE,EAAE;IAC1E,YAAY,GAAG,YAAY,IAAI,CAAC,CAAC,CAAC,iDAAiD;IACnF,SAAS,GAAG,MAAM,CAAC,CAAC,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzE,IAAI,GAAG,CAAC,MAAM,GAAG,YAAY,EAAE;QAC7B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;KACpB;SAAM;QACL,YAAY,GAAG,YAAY,GAAG,GAAG,CAAC,MAAM,CAAC;QACzC,IAAI,YAAY,GAAG,SAAS,CAAC,MAAM,EAAE;YACnC,SAAS,IAAI,SAAS,CAAC,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,yDAAyD;SAC1H;QACD,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,GAAG,GAAG,CAAC;KAC/C;AACH,CAAC,CAAC;AAEF;;;;;;GAMG;AACH,MAAa,aAAc,SAAQ,6BAAS;IAM1C;;;;;;OAMG;IACH,YAAY,GAAc,EAAE,QAAgB,EAAE,UAAmB;QAC/D,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAlBD,sCAkBC;AAED;;;GAGG;AACH,MAAsB,iBAAiB;IAGrC;QAkKA;;;;;WAKG;QACI,8BAAyB,GAAG,CAAC,GAAkB,EAAE,GAAkB,EAAU,EAAE;YACpF,OAAO,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC,CAAC;QAzKA,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;IACxB,CAAC;IAEM,KAAK,CAAC,oBAAoB,CAAC,QAAgB;QAChD,OAAO,IAAI,OAAO,CAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACzD,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;gBAC3C,IAAI,GAAG;oBACL,MAAM,CAAC,GAAG,CAAC,CAAC;;oBAEZ,OAAO,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,wBAAwB,CAAC,QAAgB;QAC9C,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAEM,KAAK,CAAC,UAAU,CAAC,QAAgB;QACtC,OAAO,IAAI,OAAO,CAAsB,CAAC,OAAO,EAAE,EAAE;YAClD,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;gBAC7C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,cAAc,CAAC,QAAgB;QACpC,OAAO,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACI,oBAAoB,CAAC,WAAqB;QAC/C,sDAAsD;QACtD,KAAK,MAAM,UAAU,IAAI,WAAW;YAClC,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACI,mBAAmB,CAAC,UAAkB;QAC3C,sDAAsD;QACtD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,UAAU,CAAC;YACzD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAID;;;;;;;;;OASG;IACK,0BAA0B,CAAC,UAA2B,EAAE,UAAkB,EAAE,UAAkB,EAAE,UAA+B,EAAE,SAA0B,EAAE,MAAc;QACjL,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,UAAU,aAAa,MAAM,EAAE,CAAC,CAAC;QAE3E,kCAAkC;QAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC1B,OAAO;QAET,gBAAgB;QAChB,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI;YACP,OAAO;QAET,qBAAqB;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QAE/C,2CAA2C;QAC3C,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC;YACpC,UAAU,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACvE,CAAC;IAED;;;;;;;;OAQG;IACK,sBAAsB,CAAC,UAA2B,EAAE,UAAkB,EAAE,UAAkB,EAAE,UAA+B,EAAE,SAA0B,EAAE,MAAc;QAC7K,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAEnD,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE;YAChC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,aAAa,MAAM,EAAE,CAAC,CAAC,CAAC;YAC7D,mDAAmD;YACnD,wFAAwF;YACxF,IAAI,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;gBACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAClC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;gBACzB,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aAC5B;YAED,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,CAAC,IAAI;gBACP,SAAS;YAEX,MAAM,SAAS,GAAG,6BAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC;gBAC1C,UAAU,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;SACzE;IACH,CAAC;IAED;;;;;;OAMG;IACO,sBAAsB,CAAC,UAA+B,EAAE,SAA0B,EAAE,MAAc;QAC1G,MAAM,UAAU,GAAG,IAAI,KAAK,EAAiB,CAAC;QAE9C,IAAI,gBAAwB,CAAC;QAC7B,IAAI,kBAA0B,CAAC;QAC/B,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;QACtD,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QACxD,MAAM,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;QAExD,IAAI,SAAS,KAAK,mCAAe,CAAC,MAAM,EAAE;YACxC,gBAAgB,GAAG,CAAC,iBAAiB,MAAM,EAAE,CAAC,CAAC;YAC/C,kBAAkB,GAAG,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;SACpD;aAAM,IAAI,SAAS,KAAK,mCAAe,CAAC,qBAAqB,EAAE;YAC9D,gBAAgB,GAAG,YAAY,CAAC,mBAAmB,MAAM,EAAE,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC9F,kBAAkB,GAAG,YAAY,CAAC,uBAAuB,MAAM,EAAE,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;SACvI;aAAM,IAAI,SAAS,KAAK,mCAAe,CAAC,oBAAoB,EAAE;YAC7D,gBAAgB,GAAG,YAAY,CAAC,mBAAmB,MAAM,EAAE,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC9F,kBAAkB,GAAG,YAAY,CAAC,qBAAqB,MAAM,EAAE,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;SACnG;aAAM;YACL,gBAAgB,GAAG,YAAY,CAAC,qBAAqB,MAAM,EAAE,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAClI,kBAAkB,GAAG,YAAY,CAAC,yBAAyB,MAAM,EAAE,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;SAC3K;QAED,MAAM,oBAAoB,GAAG,UAAU,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAChE,MAAM,sBAAsB,GAAG,UAAU,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAEpE,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,EAAE;YACzC,IAAI,CAAC,0BAA0B,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YACxG,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,UAAU,EAAE,oBAAoB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;YACzG,IAAI,CAAC,sBAAsB,CAAC,UAAU,EAAE,UAAU,EAAE,sBAAsB,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;SAC5G;QAED,OAAO,UAAU,CAAC;IACpB,CAAC;CAaF;AA9KD,8CA8KC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Locaters\r\n */\r\n\r\nimport * as fs from \"fs\";\r\nimport * as glob from \"glob\";\r\nimport * as path from \"path\";\r\nimport { Schema, SchemaContext, SchemaKey, SchemaMatchType } from \"@itwin/ecschema-metadata\";\r\n\r\nconst formatString = (format: string, ...args: string[]) => {\r\n return format.replace(/{(\\d+)}/g, (match, theNumber) => {\r\n return typeof args[theNumber] !== \"undefined\"\r\n ? args[theNumber]\r\n : match;\r\n });\r\n};\r\n\r\nconst padStartEx = (str: string, targetLength: number, padString: string) => {\r\n targetLength = targetLength >> 0; // truncate if number or convert non-number to 0;\r\n padString = String((typeof padString !== \"undefined\" ? padString : \" \"));\r\n if (str.length > targetLength) {\r\n return String(str);\r\n } else {\r\n targetLength = targetLength - str.length;\r\n if (targetLength > padString.length) {\r\n padString += padString.repeat(targetLength / padString.length); // append to original to ensure we are longer than needed\r\n }\r\n return padString.slice(0, targetLength) + str;\r\n }\r\n};\r\n\r\n/**\r\n * A SchemaKey implementation that aids in identifying Schema files via the\r\n * addition of two properties: fileName and schemaText. The fileName contains the\r\n * full path to the file on disk and schemaText is the full string representation\r\n * of the Schema.\r\n * @beta\r\n */\r\nexport class FileSchemaKey extends SchemaKey {\r\n // The schema file associated with the SchemaKey\r\n public fileName: string;\r\n // The JSON text for the schema loaded\r\n public schemaText?: string;\r\n\r\n /**\r\n * Initializes a new FileSchemaKey object.\r\n * @param key The EC SchemaKey identifying the Schema.\r\n * @param fileName The full path to the Schema file.\r\n * @param schemaText The string representation of the Schema\r\n * loaded from disk. Optional.\r\n */\r\n constructor(key: SchemaKey, fileName: string, schemaJson?: string) {\r\n super(key.name, key.version);\r\n this.fileName = fileName;\r\n this.schemaText = schemaJson;\r\n }\r\n}\r\n\r\n/**\r\n * Abstract class to hold common/overlapping functionality between SchemaJsonFileLocater and SchemaXmlFileLocater\r\n * @beta - Needs further testing and possibly moved to a separate package.\r\n */\r\nexport abstract class SchemaFileLocater {\r\n public searchPaths: string[];\r\n\r\n constructor() {\r\n this.searchPaths = [];\r\n }\r\n\r\n public async readUtf8FileToString(filePath: string): Promise<string | undefined> {\r\n return new Promise<string | undefined>((resolve, reject) => {\r\n fs.readFile(filePath, \"utf-8\", (err, data) => {\r\n if (err)\r\n reject(err);\r\n else\r\n resolve(data);\r\n });\r\n });\r\n }\r\n\r\n public readUtf8FileToStringSync(filePath: string): string | undefined {\r\n return fs.readFileSync(filePath, \"utf-8\");\r\n }\r\n\r\n public async fileExists(filePath: string): Promise<boolean | undefined> {\r\n return new Promise<boolean | undefined>((resolve) => {\r\n fs.access(filePath, fs.constants.F_OK, (err) => {\r\n resolve(err ? false : true);\r\n });\r\n });\r\n }\r\n\r\n public fileExistsSync(filePath: string): boolean | undefined {\r\n return fs.existsSync(filePath);\r\n }\r\n\r\n /**\r\n * Adds more search paths used by this locator to find the\r\n * Schema files.\r\n * @param schemaPaths An array of search paths to add\r\n */\r\n public addSchemaSearchPaths(schemaPaths: string[]) {\r\n // If the path is not in the schemaPaths array, add it\r\n for (const schemaPath of schemaPaths)\r\n this.addSchemaSearchPath(schemaPath);\r\n }\r\n\r\n /**\r\n * Add one search path used by this locator to find the\r\n * Schema files.\r\n * @param schemaPath A search path to add\r\n */\r\n public addSchemaSearchPath(schemaPath: string) {\r\n // If the path is not in the schemaPaths array, add it\r\n if (!this.searchPaths.find((entry) => entry === schemaPath))\r\n this.searchPaths.push(schemaPath);\r\n }\r\n\r\n protected abstract getSchemaKey(data: string): SchemaKey;\r\n\r\n /**\r\n * Adds SchemaKeys to the provided foundFiles collection that match the desired SchemaKey. This method\r\n * only attempts to find schema files that have no version in the file name.\r\n * @param foundFiles The collection of SchemaKeys found in the given directory.\r\n * @param schemaPath The directory in which to search for the Schemas.\r\n * @param schemaName The short name of the Schema (without version).\r\n * @param desiredKey The SchemaKey used to find matching Schema files.\r\n * @param matchType The SchemaMatchType to use when comparing the desiredKey and the keys found during the search.\r\n * @param format The type of file that the schema key refers to. json or xml\r\n */\r\n private addCandidateNoExtSchemaKey(foundFiles: FileSchemaKey[], schemaPath: string, schemaName: string, desiredKey: Readonly<SchemaKey>, matchType: SchemaMatchType, format: string) {\r\n const fullPath = path.join(schemaPath, `${schemaName}.ecschema.${format}`);\r\n\r\n // If the file does not exist, end\r\n if (!fs.existsSync(fullPath))\r\n return;\r\n\r\n // Read the file\r\n const file = fs.readFileSync(fullPath);\r\n if (!file)\r\n return;\r\n\r\n // Get the schema key\r\n const key = this.getSchemaKey(file.toString());\r\n\r\n // If the key matches, put it in foundFiles\r\n if (key.matches(desiredKey, matchType))\r\n foundFiles.push(new FileSchemaKey(key, fullPath, file.toString()));\r\n }\r\n\r\n /**\r\n * Adds SchemaKeys to the provided foundFiles collection that match the desired SchemaKey\r\n * @param foundFiles The collection of SchemaKeys found in the given directory\r\n * @param schemaPath The directory in which to search for the Schemas\r\n * @param fileFilter The file filter, potentially with wildcards, used to locate the Schema files.\r\n * @param desiredKey The schemaKey used to find matching Schema files\r\n * @param matchType The SchemaMatchType to use when comparing the desired Key and the keys found during the search.\r\n * @param format The type of file that the schema key refers to. json or xml\r\n */\r\n private addCandidateSchemaKeys(foundFiles: FileSchemaKey[], schemaPath: string, fileFilter: string, desiredKey: Readonly<SchemaKey>, matchType: SchemaMatchType, format: string) {\r\n const fullPath = path.join(schemaPath, fileFilter);\r\n\r\n const result = new glob.GlobSync(fullPath, { sync: true });\r\n for (const match of result.found) {\r\n let fileName = path.basename(match, (`.ecschema.${format}`));\r\n // TODO: should this be moved or handled elsewhere?\r\n // Handles two version file names - SchemaKey.parseString supports only 3 version names.\r\n if (/[^\\d]\\.\\d?\\d\\.\\d?\\d$/.test(fileName)) {\r\n const parts = fileName.split(\".\");\r\n parts.splice(2, 0, \"00\");\r\n fileName = parts.join(\".\");\r\n }\r\n\r\n const file = fs.readFileSync(match);\r\n if (!file)\r\n continue;\r\n\r\n const schemaKey = SchemaKey.parseString(fileName);\r\n if (schemaKey.matches(desiredKey, matchType))\r\n foundFiles.push(new FileSchemaKey(schemaKey, match, file.toString()));\r\n }\r\n }\r\n\r\n /**\r\n * Attempts to find all Schema files in the configurable search paths that match\r\n * the desired SchemaKey.\r\n * @param desiredKey The SchemaKey to match.\r\n * @param matchType The SchemaMatchType.\r\n * @param format The type of file that the schema key refers to. json or xml\r\n */\r\n protected findEligibleSchemaKeys(desiredKey: Readonly<SchemaKey>, matchType: SchemaMatchType, format: string): FileSchemaKey[] {\r\n const foundFiles = new Array<FileSchemaKey>();\r\n\r\n let twoVersionSuffix: string;\r\n let threeVersionSuffix: string;\r\n const readVersion = desiredKey.readVersion.toString();\r\n const writeVersion = desiredKey.writeVersion.toString();\r\n const minorVersion = desiredKey.minorVersion.toString();\r\n\r\n if (matchType === SchemaMatchType.Latest) {\r\n twoVersionSuffix = (`.*.*.ecschema.${format}`);\r\n threeVersionSuffix = (`.*.*.*.ecschema.${format}`);\r\n } else if (matchType === SchemaMatchType.LatestWriteCompatible) {\r\n twoVersionSuffix = formatString(`.{0}.*.ecschema.${format}`, padStartEx(readVersion, 2, \"0\"));\r\n threeVersionSuffix = formatString(`.{0}.{1}.*.ecschema.${format}`, padStartEx(readVersion, 2, \"0\"), padStartEx(writeVersion, 2, \"0\"));\r\n } else if (matchType === SchemaMatchType.LatestReadCompatible) {\r\n twoVersionSuffix = formatString(`.{0}.*.ecschema.${format}`, padStartEx(readVersion, 2, \"0\"));\r\n threeVersionSuffix = formatString(`.{0}.*.*.ecschema.${format}`, padStartEx(readVersion, 2, \"0\"));\r\n } else {\r\n twoVersionSuffix = formatString(`.{0}.{1}.ecschema.${format}`, padStartEx(readVersion, 2, \"0\"), padStartEx(writeVersion, 2, \"0\"));\r\n threeVersionSuffix = formatString(`.{0}.{1}.{2}.ecschema.${format}`, padStartEx(readVersion, 2, \"0\"), padStartEx(writeVersion, 2, \"0\"), padStartEx(minorVersion, 2, \"0\"));\r\n }\r\n\r\n const twoVersionExpression = desiredKey.name + twoVersionSuffix;\r\n const threeVersionExpression = desiredKey.name + threeVersionSuffix;\r\n\r\n for (const searchPath of this.searchPaths) {\r\n this.addCandidateNoExtSchemaKey(foundFiles, searchPath, desiredKey.name, desiredKey, matchType, format);\r\n this.addCandidateSchemaKeys(foundFiles, searchPath, twoVersionExpression, desiredKey, matchType, format);\r\n this.addCandidateSchemaKeys(foundFiles, searchPath, threeVersionExpression, desiredKey, matchType, format);\r\n }\r\n\r\n return foundFiles;\r\n }\r\n\r\n public abstract getSchema<T extends Schema>(key: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<T | undefined>;\r\n\r\n /**\r\n * Compares two Schema versions. If the left-hand version is greater, 1 is returned. If the\r\n * left-hand version is less, -1 us returned. If the versions are an exact match, 0 is returned.\r\n * @param lhs The 'left-hand' FileSchemaKey.\r\n * @param rhs The 'right-hand' FileSchemaKey.\r\n */\r\n public compareSchemaKeyByVersion = (lhs: FileSchemaKey, rhs: FileSchemaKey): number => {\r\n return lhs.compareByVersion(rhs);\r\n };\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"SchemaFileLocater.js","sourceRoot":"","sources":["../../src/SchemaFileLocater.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Locaters\r\n */\r\n\r\nimport * as fs from \"fs\";\r\nimport { globSync } from \"glob\";\r\nimport * as path from \"path\";\r\nimport { Schema, SchemaContext, SchemaKey, SchemaMatchType } from \"@itwin/ecschema-metadata\";\r\n\r\nconst formatString = (format: string, ...args: string[]) => {\r\n return format.replace(/{(\\d+)}/g, (match, theNumber) => {\r\n return typeof args[theNumber] !== \"undefined\"\r\n ? args[theNumber]\r\n : match;\r\n });\r\n};\r\n\r\nconst padStartEx = (str: string, targetLength: number, padString: string) => {\r\n targetLength = targetLength >> 0; // truncate if number or convert non-number to 0;\r\n padString = String((typeof padString !== \"undefined\" ? padString : \" \"));\r\n if (str.length > targetLength) {\r\n return String(str);\r\n } else {\r\n targetLength = targetLength - str.length;\r\n if (targetLength > padString.length) {\r\n padString += padString.repeat(targetLength / padString.length); // append to original to ensure we are longer than needed\r\n }\r\n return padString.slice(0, targetLength) + str;\r\n }\r\n};\r\n\r\n/**\r\n * A SchemaKey implementation that aids in identifying Schema files via the\r\n * addition of two properties: fileName and schemaText. The fileName contains the\r\n * full path to the file on disk and schemaText is the full string representation\r\n * of the Schema.\r\n * @beta\r\n */\r\nexport class FileSchemaKey extends SchemaKey {\r\n // The schema file associated with the SchemaKey\r\n public fileName: string;\r\n // The JSON text for the schema loaded\r\n public schemaText?: string;\r\n\r\n /**\r\n * Initializes a new FileSchemaKey object.\r\n * @param key The EC SchemaKey identifying the Schema.\r\n * @param fileName The full path to the Schema file.\r\n * @param schemaText The string representation of the Schema\r\n * loaded from disk. Optional.\r\n */\r\n constructor(key: SchemaKey, fileName: string, schemaJson?: string) {\r\n super(key.name, key.version);\r\n this.fileName = fileName;\r\n this.schemaText = schemaJson;\r\n }\r\n}\r\n\r\n/**\r\n * Abstract class to hold common/overlapping functionality between SchemaJsonFileLocater and SchemaXmlFileLocater\r\n * @beta - Needs further testing and possibly moved to a separate package.\r\n */\r\nexport abstract class SchemaFileLocater {\r\n public searchPaths: string[];\r\n\r\n constructor() {\r\n this.searchPaths = [];\r\n }\r\n\r\n public async readUtf8FileToString(filePath: string): Promise<string | undefined> {\r\n return new Promise<string | undefined>((resolve, reject) => {\r\n fs.readFile(filePath, \"utf-8\", (err, data) => {\r\n if (err)\r\n reject(err);\r\n else\r\n resolve(data);\r\n });\r\n });\r\n }\r\n\r\n public readUtf8FileToStringSync(filePath: string): string | undefined {\r\n return fs.readFileSync(filePath, \"utf-8\");\r\n }\r\n\r\n public async fileExists(filePath: string): Promise<boolean | undefined> {\r\n return new Promise<boolean | undefined>((resolve) => {\r\n fs.access(filePath, fs.constants.F_OK, (err) => {\r\n resolve(err ? false : true);\r\n });\r\n });\r\n }\r\n\r\n public fileExistsSync(filePath: string): boolean | undefined {\r\n return fs.existsSync(filePath);\r\n }\r\n\r\n /**\r\n * Adds more search paths used by this locator to find the\r\n * Schema files.\r\n * @param schemaPaths An array of search paths to add\r\n */\r\n public addSchemaSearchPaths(schemaPaths: string[]) {\r\n // If the path is not in the schemaPaths array, add it\r\n for (const schemaPath of schemaPaths)\r\n this.addSchemaSearchPath(schemaPath);\r\n }\r\n\r\n /**\r\n * Add one search path used by this locator to find the\r\n * Schema files.\r\n * @param schemaPath A search path to add\r\n */\r\n public addSchemaSearchPath(schemaPath: string) {\r\n // If the path is not in the schemaPaths array, add it\r\n if (!this.searchPaths.find((entry) => entry === schemaPath))\r\n this.searchPaths.push(schemaPath);\r\n }\r\n\r\n protected abstract getSchemaKey(data: string): SchemaKey;\r\n\r\n /**\r\n * Adds SchemaKeys to the provided foundFiles collection that match the desired SchemaKey. This method\r\n * only attempts to find schema files that have no version in the file name.\r\n * @param foundFiles The collection of SchemaKeys found in the given directory.\r\n * @param schemaPath The directory in which to search for the Schemas.\r\n * @param schemaName The short name of the Schema (without version).\r\n * @param desiredKey The SchemaKey used to find matching Schema files.\r\n * @param matchType The SchemaMatchType to use when comparing the desiredKey and the keys found during the search.\r\n * @param format The type of file that the schema key refers to. json or xml\r\n */\r\n private addCandidateNoExtSchemaKey(foundFiles: FileSchemaKey[], schemaPath: string, schemaName: string, desiredKey: Readonly<SchemaKey>, matchType: SchemaMatchType, format: string) {\r\n const fullPath = path.join(schemaPath, `${schemaName}.ecschema.${format}`);\r\n\r\n // If the file does not exist, end\r\n if (!fs.existsSync(fullPath))\r\n return;\r\n\r\n // Read the file\r\n const file = fs.readFileSync(fullPath);\r\n if (!file)\r\n return;\r\n\r\n // Get the schema key\r\n const key = this.getSchemaKey(file.toString());\r\n\r\n // If the key matches, put it in foundFiles\r\n if (key.matches(desiredKey, matchType))\r\n foundFiles.push(new FileSchemaKey(key, fullPath, file.toString()));\r\n }\r\n\r\n /**\r\n * Adds SchemaKeys to the provided foundFiles collection that match the desired SchemaKey\r\n * @param foundFiles The collection of SchemaKeys found in the given directory\r\n * @param schemaPath The directory in which to search for the Schemas\r\n * @param fileFilter The file filter, potentially with wildcards, used to locate the Schema files.\r\n * @param desiredKey The schemaKey used to find matching Schema files\r\n * @param matchType The SchemaMatchType to use when comparing the desired Key and the keys found during the search.\r\n * @param format The type of file that the schema key refers to. json or xml\r\n */\r\n private addCandidateSchemaKeys(foundFiles: FileSchemaKey[], schemaPath: string, fileFilter: string, desiredKey: Readonly<SchemaKey>, matchType: SchemaMatchType, format: string) {\r\n const fullPath = path.join(schemaPath, fileFilter);\r\n\r\n const result = globSync(fullPath, { windowsPathsNoEscape: true });\r\n for (const match of result) {\r\n let fileName = path.basename(match, (`.ecschema.${format}`));\r\n // TODO: should this be moved or handled elsewhere?\r\n // Handles two version file names - SchemaKey.parseString supports only 3 version names.\r\n if (/[^\\d]\\.\\d?\\d\\.\\d?\\d$/.test(fileName)) {\r\n const parts = fileName.split(\".\");\r\n parts.splice(2, 0, \"00\");\r\n fileName = parts.join(\".\");\r\n }\r\n\r\n const file = fs.readFileSync(match);\r\n if (!file)\r\n continue;\r\n\r\n const schemaKey = SchemaKey.parseString(fileName);\r\n if (schemaKey.matches(desiredKey, matchType))\r\n foundFiles.push(new FileSchemaKey(schemaKey, match, file.toString()));\r\n }\r\n }\r\n\r\n /**\r\n * Attempts to find all Schema files in the configurable search paths that match\r\n * the desired SchemaKey.\r\n * @param desiredKey The SchemaKey to match.\r\n * @param matchType The SchemaMatchType.\r\n * @param format The type of file that the schema key refers to. json or xml\r\n */\r\n protected findEligibleSchemaKeys(desiredKey: Readonly<SchemaKey>, matchType: SchemaMatchType, format: string): FileSchemaKey[] {\r\n const foundFiles = new Array<FileSchemaKey>();\r\n\r\n let twoVersionSuffix: string;\r\n let threeVersionSuffix: string;\r\n const readVersion = desiredKey.readVersion.toString();\r\n const writeVersion = desiredKey.writeVersion.toString();\r\n const minorVersion = desiredKey.minorVersion.toString();\r\n\r\n if (matchType === SchemaMatchType.Latest) {\r\n twoVersionSuffix = (`.*.*.ecschema.${format}`);\r\n threeVersionSuffix = (`.*.*.*.ecschema.${format}`);\r\n } else if (matchType === SchemaMatchType.LatestWriteCompatible) {\r\n twoVersionSuffix = formatString(`.{0}.*.ecschema.${format}`, padStartEx(readVersion, 2, \"0\"));\r\n threeVersionSuffix = formatString(`.{0}.{1}.*.ecschema.${format}`, padStartEx(readVersion, 2, \"0\"), padStartEx(writeVersion, 2, \"0\"));\r\n } else if (matchType === SchemaMatchType.LatestReadCompatible) {\r\n twoVersionSuffix = formatString(`.{0}.*.ecschema.${format}`, padStartEx(readVersion, 2, \"0\"));\r\n threeVersionSuffix = formatString(`.{0}.*.*.ecschema.${format}`, padStartEx(readVersion, 2, \"0\"));\r\n } else {\r\n twoVersionSuffix = formatString(`.{0}.{1}.ecschema.${format}`, padStartEx(readVersion, 2, \"0\"), padStartEx(writeVersion, 2, \"0\"));\r\n threeVersionSuffix = formatString(`.{0}.{1}.{2}.ecschema.${format}`, padStartEx(readVersion, 2, \"0\"), padStartEx(writeVersion, 2, \"0\"), padStartEx(minorVersion, 2, \"0\"));\r\n }\r\n\r\n const twoVersionExpression = desiredKey.name + twoVersionSuffix;\r\n const threeVersionExpression = desiredKey.name + threeVersionSuffix;\r\n\r\n for (const searchPath of this.searchPaths) {\r\n this.addCandidateNoExtSchemaKey(foundFiles, searchPath, desiredKey.name, desiredKey, matchType, format);\r\n this.addCandidateSchemaKeys(foundFiles, searchPath, twoVersionExpression, desiredKey, matchType, format);\r\n this.addCandidateSchemaKeys(foundFiles, searchPath, threeVersionExpression, desiredKey, matchType, format);\r\n }\r\n\r\n return foundFiles;\r\n }\r\n\r\n public abstract getSchema<T extends Schema>(key: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<T | undefined>;\r\n\r\n /**\r\n * Compares two Schema versions. If the left-hand version is greater, 1 is returned. If the\r\n * left-hand version is less, -1 us returned. If the versions are an exact match, 0 is returned.\r\n * @param lhs The 'left-hand' FileSchemaKey.\r\n * @param rhs The 'right-hand' FileSchemaKey.\r\n */\r\n public compareSchemaKeyByVersion = (lhs: FileSchemaKey, rhs: FileSchemaKey): number => {\r\n return lhs.compareByVersion(rhs);\r\n };\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaStringLocater.js","sourceRoot":"","sources":["../../src/SchemaStringLocater.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,gEAA6F;AAE7F;;;;;GAKG;AACH,MAAa,eAAgB,SAAQ,6BAAS;IAI5C;;;;OAIG;IACH,YAAY,GAAc,EAAE,UAAkB;QAC5C,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAbD,0CAaC;AAED;;;GAGG;AACH,MAAsB,mBAAmB;IAGvC;QAkDA;;;;;WAKG;QACI,8BAAyB,GAAG,CAAC,GAAoB,EAAE,GAAoB,EAAU,EAAE;YACxF,OAAO,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC,CAAC;QAzDA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACI,gBAAgB,CAAC,aAAuB;QAC7C,sDAAsD;QACtD,KAAK,MAAM,YAAY,IAAI,aAAa;YACtC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACI,eAAe,CAAC,YAAoB;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAClD,0DAA0D;QAC1D,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,mCAAe,CAAC,KAAK,CAAC,CAAC;YACzG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1C,CAAC;IAID;;;;OAIG;IACO,sBAAsB,CAAC,UAA+B,EAAE,SAA0B;QAC1F,MAAM,YAAY,GAAG,IAAI,KAAK,EAAmB,CAAC;QAElD,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE;
|
|
1
|
+
{"version":3,"file":"SchemaStringLocater.js","sourceRoot":"","sources":["../../src/SchemaStringLocater.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,gEAA6F;AAE7F;;;;;GAKG;AACH,MAAa,eAAgB,SAAQ,6BAAS;IAI5C;;;;OAIG;IACH,YAAY,GAAc,EAAE,UAAkB;QAC5C,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAbD,0CAaC;AAED;;;GAGG;AACH,MAAsB,mBAAmB;IAGvC;QAkDA;;;;;WAKG;QACI,8BAAyB,GAAG,CAAC,GAAoB,EAAE,GAAoB,EAAU,EAAE;YACxF,OAAO,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACnC,CAAC,CAAC;QAzDA,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACI,gBAAgB,CAAC,aAAuB;QAC7C,sDAAsD;QACtD,KAAK,MAAM,YAAY,IAAI,aAAa;YACtC,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IAED;;;OAGG;IACI,eAAe,CAAC,YAAoB;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAClD,0DAA0D;QAC1D,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,mCAAe,CAAC,KAAK,CAAC,CAAC;YACzG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1C,CAAC;IAID;;;;OAIG;IACO,sBAAsB,CAAC,UAA+B,EAAE,SAA0B;QAC1F,MAAM,YAAY,GAAG,IAAI,KAAK,EAAmB,CAAC;QAElD,KAAK,MAAM,YAAY,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9C,qBAAqB;YACrB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;YAE5C,2CAA2C;YAC3C,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,SAAS,CAAC;gBACpC,YAAY,CAAC,IAAI,CAAC,IAAI,eAAe,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;CAaF;AA9DD,kDA8DC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Locaters\r\n */\r\n\r\nimport { Schema, SchemaContext, SchemaKey, SchemaMatchType } from \"@itwin/ecschema-metadata\";\r\n\r\n/**\r\n * A SchemaKey implementation that aids in identifying Schema strings via the\r\n * addition of the schemaText property. The schemaText is the full XML string\r\n * representation of the Schema.\r\n * @beta\r\n */\r\nexport class StringSchemaKey extends SchemaKey {\r\n // The text for the schema loaded\r\n public schemaText: string;\r\n\r\n /**\r\n * Initializes a new StringSchemaKey object.\r\n * @param key The EC SchemaKey identifying the Schema.\r\n * @param schemaText The string representation of the Schema\r\n */\r\n constructor(key: SchemaKey, schemaText: string) {\r\n super(key.name, key.version);\r\n this.schemaText = schemaText;\r\n }\r\n}\r\n\r\n/**\r\n * Abstract class to hold common/overlapping functionality between SchemaJsonStringLocater and SchemaXmlStringLocater\r\n * @beta\r\n */\r\nexport abstract class SchemaStringLocater {\r\n public schemaStrings: string[];\r\n\r\n constructor() {\r\n this.schemaStrings = [];\r\n }\r\n\r\n /**\r\n * Adds schema strings used by this locator to find the\r\n * Schemas.\r\n * @param schemaPaths An array of Schema strings to add\r\n */\r\n public addSchemaStrings(schemaStrings: string[]) {\r\n // If the path is not in the schemaPaths array, add it\r\n for (const schemaString of schemaStrings)\r\n this.addSchemaString(schemaString);\r\n }\r\n\r\n /**\r\n * Adds a schema string used by this locator to locate and load Schemas.\r\n * @param schemaText The text of the Schema\r\n */\r\n public addSchemaString(schemaString: string) {\r\n const schemaKey = this.getSchemaKey(schemaString);\r\n // If the string is not in the schemaStrings array, add it\r\n if (!this.schemaStrings.find((entry) => this.getSchemaKey(entry).matches(schemaKey, SchemaMatchType.Exact)))\r\n this.schemaStrings.push(schemaString);\r\n }\r\n\r\n protected abstract getSchemaKey(data: string): SchemaKey;\r\n\r\n /**\r\n * Attempts to find all Schema strings that match the desired SchemaKey.\r\n * @param desiredKey The SchemaKey to match.\r\n * @param matchType The SchemaMatchType.\r\n */\r\n protected findEligibleSchemaKeys(desiredKey: Readonly<SchemaKey>, matchType: SchemaMatchType): StringSchemaKey[] {\r\n const foundStrings = new Array<StringSchemaKey>();\r\n\r\n for (const schemaString of this.schemaStrings) {\r\n // Get the schema key\r\n const key = this.getSchemaKey(schemaString);\r\n\r\n // If the key matches, put it in foundFiles\r\n if (key.matches(desiredKey, matchType))\r\n foundStrings.push(new StringSchemaKey(key, schemaString));\r\n }\r\n\r\n return foundStrings;\r\n }\r\n\r\n public abstract getSchema<T extends Schema>(key: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<T | undefined>;\r\n\r\n /**\r\n * Compares two Schema versions. If the left-hand version is greater, 1 is returned. If the\r\n * left-hand version is less, -1 us returned. If the versions are an exact match, 0 is returned.\r\n * @param lhs The 'left-hand' StringSchemaKey.\r\n * @param rhs The 'right-hand' StringSchemaKey.\r\n */\r\n public compareSchemaKeyByVersion = (lhs: StringSchemaKey, rhs: StringSchemaKey): number => {\r\n return lhs.compareByVersion(rhs);\r\n };\r\n}\r\n"]}
|
package/lib/cjs/SchemaXml.js
CHANGED
package/lib/cjs/SchemaXml.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaXml.js","sourceRoot":"","sources":["../../src/SchemaXml.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,+BAA+B;AAC/B,6BAA6B;AAC7B,2CAA0D;AAG1D;;;GAGG;AACH,IAAiB,SAAS,CAyCzB;AAzCD,WAAiB,SAAS;IAExB;;;;OAIG;IACI,KAAK,UAAU,SAAS,CAAC,MAAc,EAAE,UAAkB;QAChE,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAEtC,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACnD,IAAI;
|
|
1
|
+
{"version":3,"file":"SchemaXml.js","sourceRoot":"","sources":["../../src/SchemaXml.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,+BAA+B;AAC/B,6BAA6B;AAC7B,2CAA0D;AAG1D;;;GAGG;AACH,IAAiB,SAAS,CAyCzB;AAzCD,WAAiB,SAAS;IAExB;;;;OAIG;IACI,KAAK,UAAU,SAAS,CAAC,MAAc,EAAE,UAAkB;QAChE,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC;QAEtC,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACpC,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,MAAM,GAAG,GAAG,sCAAsC,QAAQ,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;YAC9E,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAVqB,mBAAS,YAU9B,CAAA;IAED;;;OAGG;IACI,KAAK,UAAU,WAAW,CAAC,MAAc;QAC9C,IAAI,MAAM,GAAG,IAAI,kBAAS,EAAE,CAAC,eAAe,CAAC,wCAAwC,EAAE,iBAAiB,CAAC,CAAC;QAE1G,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACpC,MAAM,UAAU,GAAG,IAAI,sBAAa,EAAE,CAAC;QACvC,OAAO,UAAU,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IANqB,qBAAW,cAMhC,CAAA;IAED,SAAS,aAAa,CAAC,MAAc,EAAE,UAAkB;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,GAAG,GAAG,yBAAyB,OAAO,mBAAmB,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,eAAe,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC,EAzCgB,SAAS,yBAAT,SAAS,QAyCzB","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Utils\r\n */\r\n\r\nimport * as fs from \"fs-extra\";\r\nimport * as path from \"path\";\r\nimport { DOMParser, XMLSerializer } from \"@xmldom/xmldom\";\r\nimport { Schema } from \"@itwin/ecschema-metadata\";\r\n\r\n/**\r\n * Utility class to assist in creating serialized EC Schemas on the file system.\r\n * @beta\r\n */\r\nexport namespace SchemaXml {\r\n\r\n /**\r\n * Writes a Schema to an xml file to the specified output path.\r\n * @param schema The Schema to serialize.\r\n * @param outputPath The directory in which to create the file.\r\n */\r\n export async function writeFile(schema: Schema, outputPath: string) {\r\n const xml = await writeString(schema);\r\n\r\n const baseFile = getSchemaPath(schema, outputPath);\r\n try {\r\n await fs.writeFile(baseFile, xml);\r\n } catch (err: any) {\r\n const msg = `An error occurred writing to file '${baseFile}': ${err.message}`;\r\n throw new Error(msg);\r\n }\r\n }\r\n\r\n /**\r\n * Writes a Schema to an xml string.\r\n * @param schema The Schema to serialize.\r\n */\r\n export async function writeString(schema: Schema): Promise<string> {\r\n let xmlDoc = new DOMParser().parseFromString(`<?xml version=\"1.0\" encoding=\"UTF-8\"?>`, \"application/xml\");\r\n\r\n xmlDoc = await schema.toXml(xmlDoc);\r\n const serializer = new XMLSerializer();\r\n return serializer.serializeToString(xmlDoc);\r\n }\r\n\r\n function getSchemaPath(schema: Schema, outputPath: string): string {\r\n const realDir = path.normalize(outputPath);\r\n const test = fs.pathExistsSync(realDir);\r\n if (!test) {\r\n const msg = `The output directory '${realDir}' does not exist.`;\r\n throw new Error(msg);\r\n }\r\n\r\n return path.resolve(realDir, `${schema.name}.ecschema.xml`);\r\n }\r\n}\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StubSchemaXmlFileLocater.js","sourceRoot":"","sources":["../../src/StubSchemaXmlFileLocater.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Locaters\r\n */\r\n\r\nimport * as path from \"path\";\r\nimport {\r\n ECObjectsError, ECObjectsStatus, ECVersion, ISchemaLocater, Schema, SchemaContext, SchemaInfo, SchemaKey, SchemaMatchType,\r\n} from \"@itwin/ecschema-metadata\";\r\nimport { FileSchemaKey, SchemaFileLocater } from \"./SchemaFileLocater\";\r\n\r\nfunction isECv2Schema(schemaText: string): boolean {\r\n return /<ECSchema[^>]*xmlns=\".*ECXML.2.0\"/.test(schemaText);\r\n}\r\n\r\n/**\r\n * A SchemaLocater implementation for locating XML Schema files\r\n * from the file system using configurable search paths. Returns only\r\n * Schemas from XML files with their keys populated.\r\n * @internal\r\n */\r\nexport class StubSchemaXmlFileLocater extends SchemaFileLocater implements ISchemaLocater {\r\n /**\r\n * Loads a Schema from an XML file on the file system.\r\n * @param schemaPath The path to the Schema file.\r\n * @param schemaText Optionally pass in the schema text read from the schema file. If undefined,\r\n * the schema will be read from the provided schemaPath.\r\n */\r\n public loadSchema(schemaPath: string, schemaText?: string): Schema {\r\n schemaText = schemaText || this.readUtf8FileToStringSync(schemaPath);\r\n if (!schemaText)\r\n throw new ECObjectsError(ECObjectsStatus.UnableToLocateSchema, `Unable to locate schema XML file at ${schemaPath}`);\r\n\r\n this.addSchemaSearchPaths([path.dirname(schemaPath)]);\r\n const key = this.getSchemaKey(schemaText);\r\n const alias = this.getSchemaAlias(schemaText);\r\n const context = new SchemaContext();\r\n context.addLocater(this);\r\n\r\n // Load the schema and return it\r\n const schema = new Schema(context, new FileSchemaKey(key, schemaPath, schemaText), alias);\r\n this.addSchemaReferences(schema, context, SchemaMatchType.LatestWriteCompatible);\r\n return schema;\r\n }\r\n\r\n /**\r\n * Attempts to retrieve a Schema with the given SchemaKey by using the configured search paths\r\n * to locate the XML Schema file from the file system. Returns only Schemas from XML files with\r\n * their keys populated.\r\n * @param key The SchemaKey of the Schema to retrieve.\r\n * @param matchType The SchemaMatchType.\r\n * @param context The SchemaContext that will control the lifetime of the schema.\r\n */\r\n public async getSchema<T extends Schema>(key: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<T | undefined> {\r\n return this.getSchemaSync(key, matchType, context) as T;\r\n }\r\n\r\n /**\r\n * Gets the schema info which matches the provided SchemaKey. The schema info may be returned before the schema is fully loaded.\r\n * The fully loaded schema can be gotten later from the context using the getCachedSchema method.\r\n * @param schemaKey The SchemaKey describing the schema to get from the cache.\r\n * @param matchType The match type to use when locating the schema\r\n * @param context The SchemaContext that will control the lifetime of the schema and holds the schema's references, if they exist.\r\n */\r\n public async getSchemaInfo(key: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<SchemaInfo | undefined> {\r\n return this.getSchemaSync(key, matchType, context) as SchemaInfo;\r\n }\r\n\r\n /**\r\n * Attempts to retrieve a Schema with the given SchemaKey by using the configured search paths\r\n * to locate the XML Schema file from the file system. Returns only Schemas from XML files with\r\n * their keys populated.\r\n * @param key The SchemaKey of the Schema to retrieve.\r\n * @param matchType The SchemaMatchType.\r\n * @param context The SchemaContext that will control the lifetime of the schema.\r\n */\r\n public getSchemaSync<T extends Schema>(key: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): T | undefined {\r\n const candidates: FileSchemaKey[] = this.findEligibleSchemaKeys(key, matchType, \"xml\");\r\n\r\n if (!candidates || candidates.length === 0)\r\n return undefined;\r\n\r\n const maxCandidate = candidates.sort(this.compareSchemaKeyByVersion)[candidates.length - 1]; // eslint-disable-line @typescript-eslint/unbound-method\r\n const alias = this.getSchemaAlias(maxCandidate.schemaText!);\r\n const schema = new Schema(context, maxCandidate, alias) as T;\r\n context.addSchemaSync(schema);\r\n\r\n this.addSchemaReferences(schema, context, SchemaMatchType.LatestWriteCompatible);\r\n return schema;\r\n }\r\n\r\n /**\r\n * Constructs a SchemaKey based on the information in the Schema XML.\r\n * @param schemaXml The Schema XML as a string.\r\n */\r\n public getSchemaKey(schemaXml: string): SchemaKey {\r\n const matches = schemaXml.match(/<ECSchema ([^]+?)>/g);\r\n if (!matches || matches.length !== 1)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidSchemaXML, `Could not find '<ECSchema>' tag in the given file`);\r\n\r\n const name = matches[0].match(/schemaName=\"(.+?)\"/);\r\n const version = matches[0].match(/version=\"(.+?)\"/);\r\n if (!name || name.length !== 2 || !version || version.length !== 2)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidSchemaXML, `Could not find the ECSchema 'schemaName' or 'version' tag in the given file`);\r\n\r\n let ecVersion: ECVersion;\r\n if (isECv2Schema(schemaXml))\r\n ecVersion = this.fromECv2String(version[1]);\r\n else\r\n ecVersion = ECVersion.fromString(version[1]);\r\n\r\n const key = new SchemaKey(name[1], ecVersion);\r\n return key;\r\n }\r\n\r\n /**\r\n * Gets an array of SchemaKeys of the Schemas referenced by the given Schema.\r\n * @param xmlSchemaKey The SchemaKey of the parent Schema containing the references.\r\n */\r\n private getSchemaReferenceKeys(schemaKey: FileSchemaKey): SchemaKey[] {\r\n return this._getSchemaReferenceKeys(schemaKey);\r\n }\r\n\r\n /**\r\n * Adds schemas to the references collection for the given Schema by locating\r\n * the referenced schemas.\r\n * @param schema The schema for which to add the references.\r\n * @param context The SchemaContext that will control the lifetime of the schema.\r\n * @param refMatchType The SchemaMatchType to use when locating schema references.\r\n */\r\n private addSchemaReferences(schema: Schema, context: SchemaContext, refMatchType: SchemaMatchType): void {\r\n const refKeys = this.getSchemaReferenceKeys(schema.schemaKey as FileSchemaKey);\r\n\r\n for (const key of refKeys) {\r\n const refSchema = context ? context.getSchemaSync(key, refMatchType) : undefined;\r\n if (!refSchema)\r\n throw new ECObjectsError(ECObjectsStatus.UnableToLocateSchema, `Unable to locate referenced schema: ${key.name}.${key.readVersion}.${key.writeVersion}.${key.minorVersion}`);\r\n\r\n schema.references.push(refSchema);\r\n }\r\n }\r\n\r\n /**\r\n * Gets an array of SchemaKeys of the Schemas referenced by the given Schema.\r\n * @param data The Schema XML string.\r\n */\r\n private _getSchemaReferenceKeys(xmlSchemaKey: FileSchemaKey): SchemaKey[] {\r\n const file = xmlSchemaKey.schemaText;\r\n\r\n if (!file)\r\n throw new ECObjectsError(ECObjectsStatus.UnableToLocateSchema, `Could not locate the schema file, ${xmlSchemaKey.fileName}, for the schema ${xmlSchemaKey.name}`);\r\n\r\n const data = file.toString().replace(/(\\s*)<!--[\\s\\S]*?--!?>/g, \"\"); // ignore any comments in the XML file when getting the array of SchemaKeys\r\n\r\n const keys: SchemaKey[] = [];\r\n const matches = data.match(/<ECSchemaReference ([^]+?)\\/>/g);\r\n if (!matches)\r\n return keys;\r\n\r\n for (const match of matches) {\r\n const name = match.match(/name=\"(.+?)\"/);\r\n const versionMatch = match.match(/version=\"(.+?)\"/);\r\n if (!name || name.length !== 2 || !versionMatch || versionMatch.length !== 2)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidSchemaXML, `Invalid ECSchemaReference xml encountered in the schema file`);\r\n\r\n // write version maybe missing, so insert \"0\"\r\n let versionString = versionMatch[1];\r\n const versionParts = versionString.split(\".\");\r\n if (versionParts.length === 2)\r\n versionParts.splice(1, 0, \"0\");\r\n\r\n versionString = versionParts.join(\".\");\r\n\r\n const key = new SchemaKey(name[1], ECVersion.fromString(versionString));\r\n keys.push(key);\r\n }\r\n\r\n return keys;\r\n }\r\n\r\n /**\r\n * Gets the Schema alias from the Schema XML.\r\n * @param data The Schema XML as a string.\r\n */\r\n private getSchemaAlias(schemaXml: string): string {\r\n let match: any;\r\n\r\n if (isECv2Schema(schemaXml)) {\r\n match = schemaXml.match(/<ECSchema.*nameSpacePrefix=\"(?<alias>\\w+)\"/) as any;\r\n } else {\r\n match = schemaXml.match(/<ECSchema.*alias=\"(?<alias>\\w+)\"/) as any;\r\n }\r\n\r\n if (!match || !match.groups.alias) {\r\n throw new ECObjectsError(ECObjectsStatus.InvalidSchemaXML, `Could not find the ECSchema 'alias' tag in the given file.`);\r\n }\r\n\r\n return match.groups.alias;\r\n }\r\n\r\n /**\r\n * Parses a valid EC 2.0 version string and returns an ECVersion object. The second digit becomes the minor version,\r\n * and a zero is inserted as the 'write' digit. Example: \"1.1\" -> \"1.0.1\".\r\n * @param versionString A valid EC 2.0 version string of the format, 'RR.mm'.\r\n */\r\n private fromECv2String(versionString: string): ECVersion {\r\n const [read, minor] = versionString.split(\".\");\r\n\r\n if (!read)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECVersion, `The read version is missing from version string, ${versionString}`);\r\n\r\n if (!minor)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECVersion, `The minor version is missing from version string, ${versionString}`);\r\n\r\n return new ECVersion(+read, 0, +minor);\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"StubSchemaXmlFileLocater.js","sourceRoot":"","sources":["../../src/StubSchemaXmlFileLocater.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module Locaters\r\n */\r\n\r\nimport * as path from \"path\";\r\nimport {\r\n ECObjectsError, ECObjectsStatus, ECVersion, ISchemaLocater, Schema, SchemaContext, SchemaInfo, SchemaKey, SchemaMatchType,\r\n} from \"@itwin/ecschema-metadata\";\r\nimport { FileSchemaKey, SchemaFileLocater } from \"./SchemaFileLocater\";\r\n\r\nfunction isECv2Schema(schemaText: string): boolean {\r\n return /<ECSchema[^>]*xmlns=\".*ECXML.2.0\"/.test(schemaText);\r\n}\r\n\r\n/**\r\n * A SchemaLocater implementation for locating XML Schema files\r\n * from the file system using configurable search paths. Returns only\r\n * Schemas from XML files with their keys populated.\r\n * @internal\r\n */\r\nexport class StubSchemaXmlFileLocater extends SchemaFileLocater implements ISchemaLocater {\r\n /**\r\n * Loads a Schema from an XML file on the file system.\r\n * @param schemaPath The path to the Schema file.\r\n * @param schemaText Optionally pass in the schema text read from the schema file. If undefined,\r\n * the schema will be read from the provided schemaPath.\r\n */\r\n public loadSchema(schemaPath: string, schemaText?: string): Schema {\r\n schemaText = schemaText || this.readUtf8FileToStringSync(schemaPath);\r\n if (!schemaText)\r\n throw new ECObjectsError(ECObjectsStatus.UnableToLocateSchema, `Unable to locate schema XML file at ${schemaPath}`);\r\n\r\n this.addSchemaSearchPaths([path.dirname(schemaPath)]);\r\n const key = this.getSchemaKey(schemaText);\r\n const alias = this.getSchemaAlias(schemaText);\r\n const context = new SchemaContext();\r\n context.addLocater(this);\r\n\r\n // Load the schema and return it\r\n const schema = new Schema(context, new FileSchemaKey(key, schemaPath, schemaText), alias);\r\n this.addSchemaReferences(schema, context, SchemaMatchType.LatestWriteCompatible);\r\n return schema;\r\n }\r\n\r\n /**\r\n * Attempts to retrieve a Schema with the given SchemaKey by using the configured search paths\r\n * to locate the XML Schema file from the file system. Returns only Schemas from XML files with\r\n * their keys populated.\r\n * @param key The SchemaKey of the Schema to retrieve.\r\n * @param matchType The SchemaMatchType.\r\n * @param context The SchemaContext that will control the lifetime of the schema.\r\n */\r\n public async getSchema<T extends Schema>(key: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<T | undefined> {\r\n return this.getSchemaSync(key, matchType, context) as T;\r\n }\r\n\r\n /**\r\n * Gets the schema info which matches the provided SchemaKey. The schema info may be returned before the schema is fully loaded.\r\n * The fully loaded schema can be gotten later from the context using the getCachedSchema method.\r\n * @param schemaKey The SchemaKey describing the schema to get from the cache.\r\n * @param matchType The match type to use when locating the schema\r\n * @param context The SchemaContext that will control the lifetime of the schema and holds the schema's references, if they exist.\r\n */\r\n public async getSchemaInfo(key: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<SchemaInfo | undefined> {\r\n return this.getSchemaSync(key, matchType, context) as SchemaInfo;\r\n }\r\n\r\n /**\r\n * Attempts to retrieve a Schema with the given SchemaKey by using the configured search paths\r\n * to locate the XML Schema file from the file system. Returns only Schemas from XML files with\r\n * their keys populated.\r\n * @param key The SchemaKey of the Schema to retrieve.\r\n * @param matchType The SchemaMatchType.\r\n * @param context The SchemaContext that will control the lifetime of the schema.\r\n */\r\n public getSchemaSync<T extends Schema>(key: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): T | undefined {\r\n const candidates: FileSchemaKey[] = this.findEligibleSchemaKeys(key, matchType, \"xml\");\r\n\r\n if (!candidates || candidates.length === 0)\r\n return undefined;\r\n\r\n const maxCandidate = candidates.sort(this.compareSchemaKeyByVersion)[candidates.length - 1]; // eslint-disable-line @typescript-eslint/unbound-method\r\n const alias = this.getSchemaAlias(maxCandidate.schemaText!);\r\n const schema = new Schema(context, maxCandidate, alias) as T;\r\n context.addSchemaSync(schema);\r\n\r\n this.addSchemaReferences(schema, context, SchemaMatchType.LatestWriteCompatible);\r\n return schema;\r\n }\r\n\r\n /**\r\n * Constructs a SchemaKey based on the information in the Schema XML.\r\n * @param schemaXml The Schema XML as a string.\r\n */\r\n public getSchemaKey(schemaXml: string): SchemaKey {\r\n const matches = schemaXml.match(/<ECSchema ([^]+?)>/g);\r\n if (!matches || matches.length !== 1)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidSchemaXML, `Could not find '<ECSchema>' tag in the given file`);\r\n\r\n const name = matches[0].match(/schemaName=\"(.+?)\"/);\r\n const version = matches[0].match(/version=\"(.+?)\"/);\r\n if (!name || name.length !== 2 || !version || version.length !== 2)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidSchemaXML, `Could not find the ECSchema 'schemaName' or 'version' tag in the given file`);\r\n\r\n let ecVersion: ECVersion;\r\n if (isECv2Schema(schemaXml))\r\n ecVersion = this.fromECv2String(version[1]);\r\n else\r\n ecVersion = ECVersion.fromString(version[1]);\r\n\r\n const key = new SchemaKey(name[1], ecVersion);\r\n return key;\r\n }\r\n\r\n /**\r\n * Gets an array of SchemaKeys of the Schemas referenced by the given Schema.\r\n * @param xmlSchemaKey The SchemaKey of the parent Schema containing the references.\r\n */\r\n private getSchemaReferenceKeys(schemaKey: FileSchemaKey): SchemaKey[] {\r\n return this._getSchemaReferenceKeys(schemaKey);\r\n }\r\n\r\n /**\r\n * Adds schemas to the references collection for the given Schema by locating\r\n * the referenced schemas.\r\n * @param schema The schema for which to add the references.\r\n * @param context The SchemaContext that will control the lifetime of the schema.\r\n * @param refMatchType The SchemaMatchType to use when locating schema references.\r\n */\r\n private addSchemaReferences(schema: Schema, context: SchemaContext, refMatchType: SchemaMatchType): void {\r\n const refKeys = this.getSchemaReferenceKeys(schema.schemaKey as FileSchemaKey);\r\n\r\n for (const key of refKeys) {\r\n const refSchema = context ? context.getSchemaSync(key, refMatchType) : undefined;\r\n if (!refSchema)\r\n throw new ECObjectsError(ECObjectsStatus.UnableToLocateSchema, `Unable to locate referenced schema: ${key.name}.${key.readVersion}.${key.writeVersion}.${key.minorVersion}`);\r\n\r\n schema.references.push(refSchema);\r\n }\r\n }\r\n\r\n /**\r\n * Gets an array of SchemaKeys of the Schemas referenced by the given Schema.\r\n * @param data The Schema XML string.\r\n */\r\n private _getSchemaReferenceKeys(xmlSchemaKey: FileSchemaKey): SchemaKey[] {\r\n const file = xmlSchemaKey.schemaText;\r\n\r\n if (!file)\r\n throw new ECObjectsError(ECObjectsStatus.UnableToLocateSchema, `Could not locate the schema file, ${xmlSchemaKey.fileName}, for the schema ${xmlSchemaKey.name}`);\r\n\r\n const data = file.toString().replace(/(\\s*)<!--[\\s\\S]*?--!?>/g, \"\"); // ignore any comments in the XML file when getting the array of SchemaKeys\r\n\r\n const keys: SchemaKey[] = [];\r\n const matches = data.match(/<ECSchemaReference ([^]+?)\\/>/g);\r\n if (!matches)\r\n return keys;\r\n\r\n for (const match of matches) {\r\n const name = match.match(/name=\"(.+?)\"/);\r\n const versionMatch = match.match(/version=\"(.+?)\"/);\r\n if (!name || name.length !== 2 || !versionMatch || versionMatch.length !== 2)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidSchemaXML, `Invalid ECSchemaReference xml encountered in the schema file`);\r\n\r\n // write version maybe missing, so insert \"0\"\r\n let versionString = versionMatch[1];\r\n const versionParts = versionString.split(\".\");\r\n if (versionParts.length === 2)\r\n versionParts.splice(1, 0, \"0\");\r\n\r\n versionString = versionParts.join(\".\");\r\n\r\n const key = new SchemaKey(name[1], ECVersion.fromString(versionString));\r\n keys.push(key);\r\n }\r\n\r\n return keys;\r\n }\r\n\r\n /**\r\n * Gets the Schema alias from the Schema XML.\r\n * @param data The Schema XML as a string.\r\n */\r\n private getSchemaAlias(schemaXml: string): string {\r\n let match: any;\r\n\r\n if (isECv2Schema(schemaXml)) {\r\n match = schemaXml.match(/<ECSchema.*nameSpacePrefix=\"(?<alias>\\w+)\"/) as any;\r\n } else {\r\n match = schemaXml.match(/<ECSchema.*alias=\"(?<alias>\\w+)\"/) as any;\r\n }\r\n\r\n if (!match || !match.groups.alias) {\r\n throw new ECObjectsError(ECObjectsStatus.InvalidSchemaXML, `Could not find the ECSchema 'alias' tag in the given file.`);\r\n }\r\n\r\n return match.groups.alias;\r\n }\r\n\r\n /**\r\n * Parses a valid EC 2.0 version string and returns an ECVersion object. The second digit becomes the minor version,\r\n * and a zero is inserted as the 'write' digit. Example: \"1.1\" -> \"1.0.1\".\r\n * @param versionString A valid EC 2.0 version string of the format, 'RR.mm'.\r\n */\r\n private fromECv2String(versionString: string): ECVersion {\r\n const [read, minor] = versionString.split(\".\");\r\n\r\n if (!read)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECVersion, `The read version is missing from version string, ${versionString}`);\r\n\r\n if (!minor)\r\n throw new ECObjectsError(ECObjectsStatus.InvalidECVersion, `The minor version is missing from version string, ${versionString}`);\r\n\r\n return new ECVersion(+read, 0, +minor);\r\n }\r\n}\r\n"]}
|
|
@@ -139,5 +139,91 @@ describe("Concurrent schema JSON deserialization", () => {
|
|
|
139
139
|
const asyncSchemas = await Promise.all(schemaPromises);
|
|
140
140
|
(0, chai_1.expect)(asyncSchemas.length).to.equal(schemaKeys.length);
|
|
141
141
|
});
|
|
142
|
+
it("Concurrently get BisCore with SchemaJsonFileLocater", async () => {
|
|
143
|
+
const schemaContext = new ecschema_metadata_1.SchemaContext();
|
|
144
|
+
const jsonFileLocater = new SchemaJsonFileLocater_1.SchemaJsonFileLocater();
|
|
145
|
+
jsonFileLocater.addSchemaSearchPath(schemaFolder);
|
|
146
|
+
schemaContext.addLocater(jsonFileLocater);
|
|
147
|
+
const schemas = await Promise.all([...Array(100).keys()].map(async () => {
|
|
148
|
+
return schemaContext.getSchema(new ecschema_metadata_1.SchemaKey("BisCore"));
|
|
149
|
+
}));
|
|
150
|
+
(0, chai_1.expect)(schemas.length).to.equal(100);
|
|
151
|
+
schemas.forEach((schema) => {
|
|
152
|
+
(0, chai_1.assert)(schema !== undefined);
|
|
153
|
+
(0, chai_1.expect)(schema.fullName).to.equal("BisCore");
|
|
154
|
+
});
|
|
155
|
+
});
|
|
156
|
+
it("Concurrently get a schema and it's referenced schema with SchemaJsonFileLocater", async () => {
|
|
157
|
+
const schemaContext = new ecschema_metadata_1.SchemaContext();
|
|
158
|
+
const jsonFileLocater = new SchemaJsonFileLocater_1.SchemaJsonFileLocater();
|
|
159
|
+
jsonFileLocater.addSchemaSearchPath(schemaFolder);
|
|
160
|
+
schemaContext.addLocater(jsonFileLocater);
|
|
161
|
+
let getBisCoreFirst = 0;
|
|
162
|
+
const schemas = await Promise.all([...Array(2).keys()].map(async () => {
|
|
163
|
+
if (getBisCoreFirst === 0) {
|
|
164
|
+
getBisCoreFirst = 1;
|
|
165
|
+
return schemaContext.getSchema(new ecschema_metadata_1.SchemaKey("BisCore"));
|
|
166
|
+
}
|
|
167
|
+
return schemaContext.getSchema(new ecschema_metadata_1.SchemaKey("CoreCustomAttributes"));
|
|
168
|
+
}));
|
|
169
|
+
(0, chai_1.expect)(schemas.length).to.equal(2);
|
|
170
|
+
schemas.forEach((schema) => {
|
|
171
|
+
(0, chai_1.expect)(schema).to.not.be.undefined;
|
|
172
|
+
});
|
|
173
|
+
});
|
|
174
|
+
const getSchemaProps = (schemaName) => {
|
|
175
|
+
if (schemaName === "BisCore") {
|
|
176
|
+
return {
|
|
177
|
+
$schema: "https://dev.bentley.com/json_schemas/ec/32/ecschema",
|
|
178
|
+
alias: "bis",
|
|
179
|
+
description: "The BIS core schema contains classes that all other domain schemas extend.",
|
|
180
|
+
label: "BIS Core",
|
|
181
|
+
name: "BisCore",
|
|
182
|
+
version: "01.00.15",
|
|
183
|
+
references: [{ name: "CoreCustomAttributes", version: "01.00.04" }],
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
if (schemaName === "CoreCustomAttributes") {
|
|
187
|
+
return {
|
|
188
|
+
$schema: "https://dev.bentley.com/json_schemas/ec/32/ecschema",
|
|
189
|
+
alias: "CoreCA",
|
|
190
|
+
description: "Custom attributes to indicate core EC concepts, may include struct classes intended for use in core custom attributes.",
|
|
191
|
+
label: "Core Custom Attributes",
|
|
192
|
+
name: "CoreCustomAttributes",
|
|
193
|
+
version: "01.00.04",
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
return undefined;
|
|
197
|
+
};
|
|
198
|
+
it("Concurrently get BisCore with SchemaJsonLocater", async () => {
|
|
199
|
+
const schemaContext = new ecschema_metadata_1.SchemaContext();
|
|
200
|
+
const jsonLocater = new ecschema_metadata_1.SchemaJsonLocater(getSchemaProps);
|
|
201
|
+
schemaContext.addLocater(jsonLocater);
|
|
202
|
+
const schemas = await Promise.all([...Array(100).keys()].map(async () => {
|
|
203
|
+
return schemaContext.getSchema(new ecschema_metadata_1.SchemaKey("BisCore"));
|
|
204
|
+
}));
|
|
205
|
+
(0, chai_1.expect)(schemas.length).to.equal(100);
|
|
206
|
+
schemas.forEach((schema) => {
|
|
207
|
+
(0, chai_1.assert)(schema !== undefined);
|
|
208
|
+
(0, chai_1.expect)(schema.fullName).to.equal("BisCore");
|
|
209
|
+
});
|
|
210
|
+
});
|
|
211
|
+
it("Concurrently get a schema and it's referenced schema with SchemaJsonLocater", async () => {
|
|
212
|
+
const schemaContext = new ecschema_metadata_1.SchemaContext();
|
|
213
|
+
const jsonLocater = new ecschema_metadata_1.SchemaJsonLocater(getSchemaProps);
|
|
214
|
+
schemaContext.addLocater(jsonLocater);
|
|
215
|
+
let getBisCoreFirst = 0;
|
|
216
|
+
const schemas = await Promise.all([...Array(2).keys()].map(async () => {
|
|
217
|
+
if (getBisCoreFirst === 0) {
|
|
218
|
+
getBisCoreFirst = 1;
|
|
219
|
+
return schemaContext.getSchema(new ecschema_metadata_1.SchemaKey("BisCore"));
|
|
220
|
+
}
|
|
221
|
+
return schemaContext.getSchema(new ecschema_metadata_1.SchemaKey("CoreCustomAttributes"));
|
|
222
|
+
}));
|
|
223
|
+
(0, chai_1.expect)(schemas.length).to.equal(2);
|
|
224
|
+
schemas.forEach((schema) => {
|
|
225
|
+
(0, chai_1.expect)(schema).to.not.be.undefined;
|
|
226
|
+
});
|
|
227
|
+
});
|
|
142
228
|
});
|
|
143
229
|
//# sourceMappingURL=ConcurrentGetSchemaJson.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConcurrentGetSchemaJson.test.js","sourceRoot":"","sources":["../../../src/test/ConcurrentGetSchemaJson.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { expect } from \"chai\";\r\nimport * as fs from \"fs\";\r\nimport * as path from \"path\";\r\nimport { ECVersion, Schema, SchemaContext, SchemaKey, SchemaMatchType } from \"@itwin/ecschema-metadata\";\r\nimport { SchemaJsonFileLocater } from \"../SchemaJsonFileLocater\";\r\n\r\ndescribe(\"Concurrent schema JSON deserialization\", () => {\r\n const assetDir: string = path.join(__dirname, \"assets\");\r\n const schemaFolder = path.join(__dirname, \"assets\", \"json\");\r\n\r\n const schemaKeys: SchemaKey[] = [];\r\n let context: SchemaContext;\r\n let contextSync: SchemaContext;\r\n let syncSchemas: Array<Schema | undefined> = [];\r\n\r\n const locater = new SchemaJsonFileLocater();\r\n\r\n before(() => {\r\n if (!fs.existsSync(assetDir))\r\n fs.mkdirSync(assetDir);\r\n if (!fs.existsSync(schemaFolder))\r\n fs.mkdirSync(schemaFolder);\r\n\r\n copySchemasToAssetsDir();\r\n\r\n // Deserialize schemas synchronously/serially as standard to compare to\r\n contextSync = new SchemaContext();\r\n locater.addSchemaSearchPath(schemaFolder);\r\n contextSync.addLocater(locater);\r\n\r\n const schemaFiles = fs.readdirSync(schemaFolder);\r\n schemaFiles.forEach((fileName) => {\r\n const schemaFile = path.join(schemaFolder, fileName);\r\n const schemaJson = JSON.parse(fs.readFileSync(schemaFile, \"utf-8\"));\r\n const schemaName = schemaJson.name;\r\n const schemaVersion = schemaJson.version;\r\n\r\n const key = new SchemaKey(schemaName.toString(), ECVersion.fromString(schemaVersion.toString()));\r\n schemaKeys.push(key);\r\n });\r\n\r\n syncSchemas = schemaKeys.map((key): Schema | undefined => {\r\n if (!key)\r\n return undefined;\r\n\r\n const schema = contextSync.getSchemaSync(key, SchemaMatchType.Latest);\r\n return schema;\r\n });\r\n });\r\n\r\n beforeEach(() => {\r\n context = new SchemaContext();\r\n context.addLocater(locater);\r\n });\r\n\r\n function getSchemaPathFromPackage(packageName: string, schemaFileName: string): string {\r\n const schemaFile = path.join(__dirname, \"..\", \"..\", \"..\", \"node_modules\", \"@bentley\", packageName, schemaFileName);\r\n return schemaFile;\r\n }\r\n\r\n function copySchemasToAssetsDir() {\r\n // Copy Schemas that we need for testing\r\n fs.copyFileSync(getSchemaPathFromPackage(\"aec-units-schema\", \"AecUnits.ecschema.json\"), path.join(schemaFolder, \"AecUnits.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"architectural-physical-schema\", \"ArchitecturalPhysical.ecschema.json\"), path.join(schemaFolder, \"ArchitecturalPhysical.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"bis-core-schema\", \"BisCore.ecschema.json\"), path.join(schemaFolder, \"BisCore.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"bis-custom-attributes-schema\", \"BisCustomAttributes.ecschema.json\"), path.join(schemaFolder, \"BisCustomAttributes.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"construction-schema\", \"Construction.ecschema.json\"), path.join(schemaFolder, \"Construction.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"core-custom-attributes-schema\", \"CoreCustomAttributes.ecschema.json\"), path.join(schemaFolder, \"CoreCustomAttributes.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"ecdb-map-schema\", \"ECDbMap.ecschema.json\"), path.join(schemaFolder, \"ECDbMap.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"ecdb-schema-policies-schema\", \"ECDbSchemaPolicies.ecschema.json\"), path.join(schemaFolder, \"ECDbSchemaPolicies.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"formats-schema\", \"Formats.ecschema.json\"), path.join(schemaFolder, \"Formats.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"linear-referencing-schema\", \"LinearReferencing.ecschema.json\"), path.join(schemaFolder, \"LinearReferencing.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"physical-material-schema\", \"PhysicalMaterial.ecschema.json\"), path.join(schemaFolder, \"PhysicalMaterial.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"plant-custom-attributes-schema\", \"PlantCustomAttributes.ecschema.json\"), path.join(schemaFolder, \"PlantCustomAttributes.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"quantity-takeoffs-aspects-schema\", \"QuantityTakeoffsAspects.ecschema.json\"), path.join(schemaFolder, \"QuantityTakeoffsAspects.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"spatial-composition-schema\", \"SpatialComposition.ecschema.json\"), path.join(schemaFolder, \"SpatialComposition.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"structural-physical-schema\", \"StructuralPhysical.ecschema.json\"), path.join(schemaFolder, \"StructuralPhysical.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"units-schema\", \"Units.ecschema.json\"), path.join(schemaFolder, \"Units.ecschema.json\"));\r\n }\r\n\r\n it(\"should match schemas deserialized concurrently with schemas deserialized serially\", async () => {\r\n const schemaPromises = schemaKeys.map(async (key): Promise<Schema | undefined> => {\r\n if (!key)\r\n return undefined;\r\n\r\n const schema = await context.getSchema(key, SchemaMatchType.Latest);\r\n return schema;\r\n });\r\n const asyncSchemas = await Promise.all(schemaPromises);\r\n\r\n for (let i = 0; i < schemaKeys.length; i++) {\r\n const syncSchema = syncSchemas[i];\r\n expect(syncSchema).not.to.be.undefined;\r\n const syncJSON = syncSchema!.toJSON();\r\n\r\n const asyncSchema = asyncSchemas[i];\r\n expect(asyncSchema).not.to.be.undefined;\r\n const asyncJSON = asyncSchema!.toJSON();\r\n expect(asyncJSON).to.deep.equal(syncJSON);\r\n }\r\n });\r\n\r\n it(\"should be able to mix getSchema and getSchemaSync\", async () => {\r\n const schemaPromises = schemaKeys.map(async (key, index): Promise<Schema | undefined> => {\r\n if (index % 2 === 0) {\r\n // Use getSchema() for even indices\r\n if (!key)\r\n return undefined;\r\n\r\n const schema = await context.getSchema(key, SchemaMatchType.Latest);\r\n return schema;\r\n } else {\r\n // Use getSchemaSync() for odd indices\r\n if (!key)\r\n return undefined;\r\n\r\n const schema = context.getSchemaSync(key, SchemaMatchType.Latest);\r\n return schema;\r\n }\r\n });\r\n const schemas = await Promise.all(schemaPromises);\r\n\r\n for (let i = 0; i < schemaKeys.length; i++) {\r\n const syncSchema = syncSchemas[i];\r\n expect(syncSchema).not.to.be.undefined;\r\n const syncJSON = syncSchema!.toJSON();\r\n\r\n const schema = schemas[i];\r\n expect(schema).not.to.be.undefined;\r\n const schemaJSON = schema!.toJSON();\r\n expect(schemaJSON).to.deep.equal(syncJSON);\r\n }\r\n });\r\n\r\n /* Run these tests below one at a time. Running them together doesn't get accurate performance likely bc of disk access caching */\r\n it.skip(\"should measure regular deserialization performance\", async () => {\r\n const schemaPromises = schemaKeys.map(async (key): Promise<Schema | undefined> => {\r\n if (!key)\r\n return undefined;\r\n\r\n const schema = await context.getSchema(key, SchemaMatchType.Latest);\r\n return schema;\r\n });\r\n\r\n for (const promise of schemaPromises) {\r\n await promise;\r\n }\r\n\r\n expect(schemaPromises.length).to.equal(schemaKeys.length);\r\n });\r\n\r\n it.skip(\"should measure concurrent deserialization performance\", async () => {\r\n const schemaPromises = schemaKeys.map(async (key): Promise<Schema | undefined> => {\r\n if (!key)\r\n return undefined;\r\n\r\n const schema = await context.getSchema(key, SchemaMatchType.Latest);\r\n return schema;\r\n });\r\n const asyncSchemas = await Promise.all(schemaPromises);\r\n\r\n expect(asyncSchemas.length).to.equal(schemaKeys.length);\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"ConcurrentGetSchemaJson.test.js","sourceRoot":"","sources":["../../../src/test/ConcurrentGetSchemaJson.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert, expect } from \"chai\";\r\nimport * as fs from \"fs\";\r\nimport * as path from \"path\";\r\nimport { ECVersion, Schema, SchemaContext, SchemaJsonLocater, SchemaKey, SchemaMatchType } from \"@itwin/ecschema-metadata\";\r\nimport { SchemaJsonFileLocater } from \"../SchemaJsonFileLocater\";\r\n\r\ndescribe(\"Concurrent schema JSON deserialization\", () => {\r\n const assetDir: string = path.join(__dirname, \"assets\");\r\n const schemaFolder = path.join(__dirname, \"assets\", \"json\");\r\n\r\n const schemaKeys: SchemaKey[] = [];\r\n let context: SchemaContext;\r\n let contextSync: SchemaContext;\r\n let syncSchemas: Array<Schema | undefined> = [];\r\n\r\n const locater = new SchemaJsonFileLocater();\r\n\r\n before(() => {\r\n if (!fs.existsSync(assetDir))\r\n fs.mkdirSync(assetDir);\r\n if (!fs.existsSync(schemaFolder))\r\n fs.mkdirSync(schemaFolder);\r\n\r\n copySchemasToAssetsDir();\r\n\r\n // Deserialize schemas synchronously/serially as standard to compare to\r\n contextSync = new SchemaContext();\r\n locater.addSchemaSearchPath(schemaFolder);\r\n contextSync.addLocater(locater);\r\n\r\n const schemaFiles = fs.readdirSync(schemaFolder);\r\n schemaFiles.forEach((fileName) => {\r\n const schemaFile = path.join(schemaFolder, fileName);\r\n const schemaJson = JSON.parse(fs.readFileSync(schemaFile, \"utf-8\"));\r\n const schemaName = schemaJson.name;\r\n const schemaVersion = schemaJson.version;\r\n\r\n const key = new SchemaKey(schemaName.toString(), ECVersion.fromString(schemaVersion.toString()));\r\n schemaKeys.push(key);\r\n });\r\n\r\n syncSchemas = schemaKeys.map((key): Schema | undefined => {\r\n if (!key)\r\n return undefined;\r\n\r\n const schema = contextSync.getSchemaSync(key, SchemaMatchType.Latest);\r\n return schema;\r\n });\r\n });\r\n\r\n beforeEach(() => {\r\n context = new SchemaContext();\r\n context.addLocater(locater);\r\n });\r\n\r\n function getSchemaPathFromPackage(packageName: string, schemaFileName: string): string {\r\n const schemaFile = path.join(__dirname, \"..\", \"..\", \"..\", \"node_modules\", \"@bentley\", packageName, schemaFileName);\r\n return schemaFile;\r\n }\r\n\r\n function copySchemasToAssetsDir() {\r\n // Copy Schemas that we need for testing\r\n fs.copyFileSync(getSchemaPathFromPackage(\"aec-units-schema\", \"AecUnits.ecschema.json\"), path.join(schemaFolder, \"AecUnits.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"architectural-physical-schema\", \"ArchitecturalPhysical.ecschema.json\"), path.join(schemaFolder, \"ArchitecturalPhysical.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"bis-core-schema\", \"BisCore.ecschema.json\"), path.join(schemaFolder, \"BisCore.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"bis-custom-attributes-schema\", \"BisCustomAttributes.ecschema.json\"), path.join(schemaFolder, \"BisCustomAttributes.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"construction-schema\", \"Construction.ecschema.json\"), path.join(schemaFolder, \"Construction.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"core-custom-attributes-schema\", \"CoreCustomAttributes.ecschema.json\"), path.join(schemaFolder, \"CoreCustomAttributes.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"ecdb-map-schema\", \"ECDbMap.ecschema.json\"), path.join(schemaFolder, \"ECDbMap.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"ecdb-schema-policies-schema\", \"ECDbSchemaPolicies.ecschema.json\"), path.join(schemaFolder, \"ECDbSchemaPolicies.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"formats-schema\", \"Formats.ecschema.json\"), path.join(schemaFolder, \"Formats.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"linear-referencing-schema\", \"LinearReferencing.ecschema.json\"), path.join(schemaFolder, \"LinearReferencing.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"physical-material-schema\", \"PhysicalMaterial.ecschema.json\"), path.join(schemaFolder, \"PhysicalMaterial.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"plant-custom-attributes-schema\", \"PlantCustomAttributes.ecschema.json\"), path.join(schemaFolder, \"PlantCustomAttributes.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"quantity-takeoffs-aspects-schema\", \"QuantityTakeoffsAspects.ecschema.json\"), path.join(schemaFolder, \"QuantityTakeoffsAspects.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"spatial-composition-schema\", \"SpatialComposition.ecschema.json\"), path.join(schemaFolder, \"SpatialComposition.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"structural-physical-schema\", \"StructuralPhysical.ecschema.json\"), path.join(schemaFolder, \"StructuralPhysical.ecschema.json\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"units-schema\", \"Units.ecschema.json\"), path.join(schemaFolder, \"Units.ecschema.json\"));\r\n }\r\n\r\n it(\"should match schemas deserialized concurrently with schemas deserialized serially\", async () => {\r\n const schemaPromises = schemaKeys.map(async (key): Promise<Schema | undefined> => {\r\n if (!key)\r\n return undefined;\r\n\r\n const schema = await context.getSchema(key, SchemaMatchType.Latest);\r\n return schema;\r\n });\r\n const asyncSchemas = await Promise.all(schemaPromises);\r\n\r\n for (let i = 0; i < schemaKeys.length; i++) {\r\n const syncSchema = syncSchemas[i];\r\n expect(syncSchema).not.to.be.undefined;\r\n const syncJSON = syncSchema!.toJSON();\r\n\r\n const asyncSchema = asyncSchemas[i];\r\n expect(asyncSchema).not.to.be.undefined;\r\n const asyncJSON = asyncSchema!.toJSON();\r\n expect(asyncJSON).to.deep.equal(syncJSON);\r\n }\r\n });\r\n\r\n it(\"should be able to mix getSchema and getSchemaSync\", async () => {\r\n const schemaPromises = schemaKeys.map(async (key, index): Promise<Schema | undefined> => {\r\n if (index % 2 === 0) {\r\n // Use getSchema() for even indices\r\n if (!key)\r\n return undefined;\r\n\r\n const schema = await context.getSchema(key, SchemaMatchType.Latest);\r\n return schema;\r\n } else {\r\n // Use getSchemaSync() for odd indices\r\n if (!key)\r\n return undefined;\r\n\r\n const schema = context.getSchemaSync(key, SchemaMatchType.Latest);\r\n return schema;\r\n }\r\n });\r\n const schemas = await Promise.all(schemaPromises);\r\n\r\n for (let i = 0; i < schemaKeys.length; i++) {\r\n const syncSchema = syncSchemas[i];\r\n expect(syncSchema).not.to.be.undefined;\r\n const syncJSON = syncSchema!.toJSON();\r\n\r\n const schema = schemas[i];\r\n expect(schema).not.to.be.undefined;\r\n const schemaJSON = schema!.toJSON();\r\n expect(schemaJSON).to.deep.equal(syncJSON);\r\n }\r\n });\r\n\r\n /* Run these tests below one at a time. Running them together doesn't get accurate performance likely bc of disk access caching */\r\n it.skip(\"should measure regular deserialization performance\", async () => {\r\n const schemaPromises = schemaKeys.map(async (key): Promise<Schema | undefined> => {\r\n if (!key)\r\n return undefined;\r\n\r\n const schema = await context.getSchema(key, SchemaMatchType.Latest);\r\n return schema;\r\n });\r\n\r\n for (const promise of schemaPromises) {\r\n await promise;\r\n }\r\n\r\n expect(schemaPromises.length).to.equal(schemaKeys.length);\r\n });\r\n\r\n it.skip(\"should measure concurrent deserialization performance\", async () => {\r\n const schemaPromises = schemaKeys.map(async (key): Promise<Schema | undefined> => {\r\n if (!key)\r\n return undefined;\r\n\r\n const schema = await context.getSchema(key, SchemaMatchType.Latest);\r\n return schema;\r\n });\r\n const asyncSchemas = await Promise.all(schemaPromises);\r\n\r\n expect(asyncSchemas.length).to.equal(schemaKeys.length);\r\n });\r\n\r\n it(\"Concurrently get BisCore with SchemaJsonFileLocater\", async () => {\r\n const schemaContext = new SchemaContext();\r\n const jsonFileLocater = new SchemaJsonFileLocater();\r\n jsonFileLocater.addSchemaSearchPath(schemaFolder);\r\n schemaContext.addLocater(jsonFileLocater);\r\n\r\n const schemas = await Promise.all(\r\n [...Array(100).keys()].map(async () => {\r\n return schemaContext.getSchema(new SchemaKey(\"BisCore\"));\r\n }),\r\n );\r\n expect(schemas.length).to.equal(100);\r\n schemas.forEach((schema) => {\r\n assert(schema !== undefined);\r\n expect(schema.fullName).to.equal(\"BisCore\");\r\n });\r\n });\r\n\r\n it(\"Concurrently get a schema and it's referenced schema with SchemaJsonFileLocater\", async () => {\r\n const schemaContext = new SchemaContext();\r\n const jsonFileLocater = new SchemaJsonFileLocater();\r\n jsonFileLocater.addSchemaSearchPath(schemaFolder);\r\n schemaContext.addLocater(jsonFileLocater);\r\n\r\n let getBisCoreFirst = 0;\r\n const schemas = await Promise.all(\r\n [...Array(2).keys()].map(async () => {\r\n if (getBisCoreFirst === 0) {\r\n getBisCoreFirst = 1;\r\n return schemaContext.getSchema(new SchemaKey(\"BisCore\"));\r\n }\r\n return schemaContext.getSchema(new SchemaKey(\"CoreCustomAttributes\"));\r\n }),\r\n );\r\n expect(schemas.length).to.equal(2);\r\n schemas.forEach((schema) => {\r\n expect(schema).to.not.be.undefined;\r\n });\r\n });\r\n\r\n const getSchemaProps = (schemaName: string) => {\r\n if (schemaName === \"BisCore\") {\r\n return {\r\n $schema: \"https://dev.bentley.com/json_schemas/ec/32/ecschema\",\r\n alias: \"bis\",\r\n description: \"The BIS core schema contains classes that all other domain schemas extend.\",\r\n label: \"BIS Core\",\r\n name: \"BisCore\",\r\n version: \"01.00.15\",\r\n references:[{name:\"CoreCustomAttributes\", version:\"01.00.04\"}],\r\n };\r\n }\r\n if (schemaName === \"CoreCustomAttributes\") {\r\n return {\r\n $schema: \"https://dev.bentley.com/json_schemas/ec/32/ecschema\",\r\n alias: \"CoreCA\",\r\n description: \"Custom attributes to indicate core EC concepts, may include struct classes intended for use in core custom attributes.\",\r\n label: \"Core Custom Attributes\",\r\n name: \"CoreCustomAttributes\",\r\n version: \"01.00.04\",\r\n };\r\n }\r\n\r\n return undefined;\r\n };\r\n\r\n it(\"Concurrently get BisCore with SchemaJsonLocater\", async () => {\r\n const schemaContext = new SchemaContext();\r\n const jsonLocater = new SchemaJsonLocater(getSchemaProps);\r\n schemaContext.addLocater(jsonLocater);\r\n\r\n const schemas = await Promise.all(\r\n [...Array(100).keys()].map(async () => {\r\n return schemaContext.getSchema(new SchemaKey(\"BisCore\"));\r\n }),\r\n );\r\n expect(schemas.length).to.equal(100);\r\n schemas.forEach((schema) => {\r\n assert(schema !== undefined);\r\n expect(schema.fullName).to.equal(\"BisCore\");\r\n });\r\n });\r\n\r\n it(\"Concurrently get a schema and it's referenced schema with SchemaJsonLocater\", async () => {\r\n const schemaContext = new SchemaContext();\r\n const jsonLocater = new SchemaJsonLocater(getSchemaProps);\r\n schemaContext.addLocater(jsonLocater);\r\n\r\n let getBisCoreFirst = 0;\r\n const schemas = await Promise.all(\r\n [...Array(2).keys()].map(async () => {\r\n if (getBisCoreFirst === 0) {\r\n getBisCoreFirst = 1;\r\n return schemaContext.getSchema(new SchemaKey(\"BisCore\"));\r\n }\r\n return schemaContext.getSchema(new SchemaKey(\"CoreCustomAttributes\"));\r\n }),\r\n );\r\n expect(schemas.length).to.equal(2);\r\n schemas.forEach((schema) => {\r\n expect(schema).to.not.be.undefined;\r\n });\r\n });\r\n});\r\n"]}
|
|
@@ -11,6 +11,7 @@ const ecschema_metadata_1 = require("@itwin/ecschema-metadata");
|
|
|
11
11
|
const SchemaXmlFileLocater_1 = require("../SchemaXmlFileLocater");
|
|
12
12
|
const StubSchemaXmlFileLocater_1 = require("../StubSchemaXmlFileLocater");
|
|
13
13
|
const SchemaXml_1 = require("../SchemaXml");
|
|
14
|
+
const SchemaXmlStringLocater_1 = require("../SchemaXmlStringLocater");
|
|
14
15
|
describe("Concurrent XML schema deserialization", () => {
|
|
15
16
|
const assetDir = path.join(__dirname, "assets");
|
|
16
17
|
const schemaFolder = path.join(__dirname, "assets", "xml");
|
|
@@ -59,7 +60,14 @@ describe("Concurrent XML schema deserialization", () => {
|
|
|
59
60
|
fs.copyFileSync(getSchemaPathFromPackage("ecdb-schema-policies-schema", "ECDbSchemaPolicies.ecschema.xml"), path.join(schemaFolder, "ECDbSchemaPolicies.ecschema.xml"));
|
|
60
61
|
fs.copyFileSync(getSchemaPathFromPackage("formats-schema", "Formats.ecschema.xml"), path.join(schemaFolder, "Formats.ecschema.xml"));
|
|
61
62
|
fs.copyFileSync(getSchemaPathFromPackage("units-schema", "Units.ecschema.xml"), path.join(schemaFolder, "Units.ecschema.xml"));
|
|
63
|
+
fs.copyFileSync(getSchemaPathFromPackage("core-custom-attributes-schema", "CoreCustomAttributes.ecschema.xml"), path.join(schemaFolder, "CoreCustomAttributes.ecschema.xml"));
|
|
64
|
+
fs.copyFileSync(getSchemaPathFromPackage("bis-core-schema", "BisCore.ecschema.xml"), path.join(schemaFolder, "BisCore.ecschema.xml"));
|
|
62
65
|
}
|
|
66
|
+
const loadSchemaString = (schemaName) => {
|
|
67
|
+
const searchPath = path.join(__dirname, "assets", "xml", `${schemaName}.ecschema.xml`);
|
|
68
|
+
const file = fs.readFileSync(searchPath);
|
|
69
|
+
return file.toString();
|
|
70
|
+
};
|
|
63
71
|
it("should match schemas deserialized concurrently with schemas deserialized serially", async () => {
|
|
64
72
|
const schemaPromises = schemaKeys.map(async (key) => {
|
|
65
73
|
if (!key)
|
|
@@ -106,5 +114,75 @@ describe("Concurrent XML schema deserialization", () => {
|
|
|
106
114
|
(0, chai_1.expect)(asyncXML).to.deep.equal(syncXML);
|
|
107
115
|
}
|
|
108
116
|
});
|
|
117
|
+
it("Concurrently get BisCore with SchemaXmlFileLocater", async () => {
|
|
118
|
+
const schemaContext = new ecschema_metadata_1.SchemaContext();
|
|
119
|
+
const xmlFileLocater = new SchemaXmlFileLocater_1.SchemaXmlFileLocater();
|
|
120
|
+
xmlFileLocater.addSchemaSearchPath(schemaFolder);
|
|
121
|
+
schemaContext.addLocater(xmlFileLocater);
|
|
122
|
+
const schemas = await Promise.all([...Array(100).keys()].map(async () => {
|
|
123
|
+
return schemaContext.getSchema(new ecschema_metadata_1.SchemaKey("BisCore"));
|
|
124
|
+
}));
|
|
125
|
+
(0, chai_1.expect)(schemas.length).to.equal(100);
|
|
126
|
+
schemas.forEach((schema) => {
|
|
127
|
+
(0, chai_1.assert)(schema !== undefined);
|
|
128
|
+
(0, chai_1.expect)(schema.fullName).to.equal("BisCore");
|
|
129
|
+
});
|
|
130
|
+
});
|
|
131
|
+
it("Concurrently get a schema and it's referenced schema with SchemaXmlFileLocater", async () => {
|
|
132
|
+
const schemaContext = new ecschema_metadata_1.SchemaContext();
|
|
133
|
+
const xmlFileLocater = new SchemaXmlFileLocater_1.SchemaXmlFileLocater();
|
|
134
|
+
xmlFileLocater.addSchemaSearchPath(schemaFolder);
|
|
135
|
+
schemaContext.addLocater(xmlFileLocater);
|
|
136
|
+
let getBisCoreFirst = 0;
|
|
137
|
+
const schemas = await Promise.all([...Array(2).keys()].map(async () => {
|
|
138
|
+
if (getBisCoreFirst === 0) {
|
|
139
|
+
getBisCoreFirst = 1;
|
|
140
|
+
return schemaContext.getSchema(new ecschema_metadata_1.SchemaKey("BisCore"));
|
|
141
|
+
}
|
|
142
|
+
return schemaContext.getSchema(new ecschema_metadata_1.SchemaKey("CoreCustomAttributes"));
|
|
143
|
+
}));
|
|
144
|
+
(0, chai_1.expect)(schemas.length).to.equal(2);
|
|
145
|
+
schemas.forEach((schema) => {
|
|
146
|
+
(0, chai_1.expect)(schema).to.not.be.undefined;
|
|
147
|
+
});
|
|
148
|
+
});
|
|
149
|
+
it("Concurrently get BisCore with SchemaXmlStringLocater", async () => {
|
|
150
|
+
const schemaContext = new ecschema_metadata_1.SchemaContext();
|
|
151
|
+
const xmlStringLocater = new SchemaXmlStringLocater_1.SchemaXmlStringLocater();
|
|
152
|
+
schemaContext.addLocater(xmlStringLocater);
|
|
153
|
+
xmlStringLocater.addSchemaString(loadSchemaString("CoreCustomAttributes"));
|
|
154
|
+
xmlStringLocater.addSchemaString(loadSchemaString("ECDbMap"));
|
|
155
|
+
xmlStringLocater.addSchemaString(loadSchemaString("ECDbSchemaPolicies"));
|
|
156
|
+
xmlStringLocater.addSchemaString(loadSchemaString("BisCore"));
|
|
157
|
+
const schemas = await Promise.all([...Array(100).keys()].map(async () => {
|
|
158
|
+
return schemaContext.getSchema(new ecschema_metadata_1.SchemaKey("BisCore"));
|
|
159
|
+
}));
|
|
160
|
+
(0, chai_1.expect)(schemas.length).to.equal(100);
|
|
161
|
+
schemas.forEach((schema) => {
|
|
162
|
+
(0, chai_1.assert)(schema !== undefined);
|
|
163
|
+
(0, chai_1.expect)(schema.fullName).to.equal("BisCore");
|
|
164
|
+
});
|
|
165
|
+
});
|
|
166
|
+
it("Concurrently get a schema and it's referenced schema with SchemaXmlStringLocater", async () => {
|
|
167
|
+
const schemaContext = new ecschema_metadata_1.SchemaContext();
|
|
168
|
+
const xmlStringLocater = new SchemaXmlStringLocater_1.SchemaXmlStringLocater();
|
|
169
|
+
schemaContext.addLocater(xmlStringLocater);
|
|
170
|
+
xmlStringLocater.addSchemaString(loadSchemaString("CoreCustomAttributes"));
|
|
171
|
+
xmlStringLocater.addSchemaString(loadSchemaString("ECDbMap"));
|
|
172
|
+
xmlStringLocater.addSchemaString(loadSchemaString("ECDbSchemaPolicies"));
|
|
173
|
+
xmlStringLocater.addSchemaString(loadSchemaString("BisCore"));
|
|
174
|
+
let getBisCoreFirst = 0;
|
|
175
|
+
const schemas = await Promise.all([...Array(2).keys()].map(async () => {
|
|
176
|
+
if (getBisCoreFirst === 0) {
|
|
177
|
+
getBisCoreFirst = 1;
|
|
178
|
+
return schemaContext.getSchema(new ecschema_metadata_1.SchemaKey("BisCore"));
|
|
179
|
+
}
|
|
180
|
+
return schemaContext.getSchema(new ecschema_metadata_1.SchemaKey("CoreCustomAttributes"));
|
|
181
|
+
}));
|
|
182
|
+
(0, chai_1.expect)(schemas.length).to.equal(2);
|
|
183
|
+
schemas.forEach((schema) => {
|
|
184
|
+
(0, chai_1.expect)(schema).to.not.be.undefined;
|
|
185
|
+
});
|
|
186
|
+
});
|
|
109
187
|
});
|
|
110
188
|
//# sourceMappingURL=ConcurrentGetSchemaXml.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConcurrentGetSchemaXml.test.js","sourceRoot":"","sources":["../../../src/test/ConcurrentGetSchemaXml.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { expect } from \"chai\";\r\nimport * as fs from \"fs\";\r\nimport * as path from \"path\";\r\nimport { Schema, SchemaContext, SchemaKey, SchemaMatchType } from \"@itwin/ecschema-metadata\";\r\nimport { SchemaXmlFileLocater } from \"../SchemaXmlFileLocater\";\r\nimport { StubSchemaXmlFileLocater } from \"../StubSchemaXmlFileLocater\";\r\nimport { SchemaXml } from \"../SchemaXml\";\r\n\r\ndescribe(\"Concurrent XML schema deserialization\", () => {\r\n const assetDir: string = path.join(__dirname, \"assets\");\r\n const schemaFolder = path.join(__dirname, \"assets\", \"xml\");\r\n\r\n const schemaKeys: SchemaKey[] = [];\r\n let context: SchemaContext;\r\n let contextSync: SchemaContext;\r\n let syncSchemas: Array<Schema | undefined> = [];\r\n\r\n const locater = new SchemaXmlFileLocater();\r\n const helperLocater = new StubSchemaXmlFileLocater();\r\n\r\n before(() => {\r\n if (!fs.existsSync(assetDir))\r\n fs.mkdirSync(assetDir);\r\n if (!fs.existsSync(schemaFolder))\r\n fs.mkdirSync(schemaFolder);\r\n\r\n copySchemasToAssetsDir();\r\n\r\n // Deserialize schemas synchronously/serially as standard to compare to\r\n contextSync = new SchemaContext();\r\n locater.addSchemaSearchPath(schemaFolder);\r\n contextSync.addLocater(locater);\r\n\r\n const schemaFiles = fs.readdirSync(schemaFolder);\r\n schemaFiles.forEach((fileName) => {\r\n const schemaFile = path.join(schemaFolder, fileName);\r\n const key = helperLocater.getSchemaKey(fs.readFileSync(schemaFile, \"utf-8\"));\r\n\r\n schemaKeys.push(key);\r\n });\r\n\r\n syncSchemas = schemaKeys.map((key): Schema | undefined => {\r\n if (!key)\r\n return undefined;\r\n\r\n const schema = contextSync.getSchemaSync(key, SchemaMatchType.Latest);\r\n return schema;\r\n });\r\n });\r\n\r\n beforeEach(() => {\r\n context = new SchemaContext();\r\n context.addLocater(locater);\r\n });\r\n\r\n function getSchemaPathFromPackage(packageName: string, schemaFileName: string): string {\r\n const schemaFile = path.join(__dirname, \"..\", \"..\", \"..\", \"node_modules\", \"@bentley\", packageName, schemaFileName);\r\n return schemaFile;\r\n }\r\n\r\n function copySchemasToAssetsDir() {\r\n // Copy Schemas that we need for testing\r\n fs.copyFileSync(getSchemaPathFromPackage(\"aec-units-schema\", \"AecUnits.ecschema.xml\"), path.join(schemaFolder, \"AecUnits.ecschema.xml\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"bis-custom-attributes-schema\", \"BisCustomAttributes.ecschema.xml\"), path.join(schemaFolder, \"BisCustomAttributes.ecschema.xml\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"ecdb-map-schema\", \"ECDbMap.ecschema.xml\"), path.join(schemaFolder, \"ECDbMap.ecschema.xml\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"ecdb-schema-policies-schema\", \"ECDbSchemaPolicies.ecschema.xml\"), path.join(schemaFolder, \"ECDbSchemaPolicies.ecschema.xml\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"formats-schema\", \"Formats.ecschema.xml\"), path.join(schemaFolder, \"Formats.ecschema.xml\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"units-schema\", \"Units.ecschema.xml\"), path.join(schemaFolder, \"Units.ecschema.xml\"));\r\n }\r\n\r\n it(\"should match schemas deserialized concurrently with schemas deserialized serially\", async () => {\r\n const schemaPromises = schemaKeys.map(async (key): Promise<Schema | undefined> => {\r\n if (!key)\r\n return undefined;\r\n\r\n const schema = await context.getSchema(key, SchemaMatchType.Latest);\r\n return schema;\r\n });\r\n const asyncSchemas = await Promise.all(schemaPromises);\r\n\r\n for (let i = 0; i < schemaKeys.length; i++) {\r\n const syncSchema = syncSchemas[i];\r\n expect(syncSchema).not.to.be.undefined;\r\n const syncXML = await SchemaXml.writeString(syncSchema!);\r\n\r\n const asyncSchema = asyncSchemas[i];\r\n expect(asyncSchema).not.to.be.undefined;\r\n const asyncXML = await SchemaXml.writeString(asyncSchema!);\r\n expect(asyncXML).to.deep.equal(syncXML);\r\n }\r\n });\r\n\r\n it(\"should be able to mix getSchema and getSchemaSync\", async () => {\r\n const schemaPromises = schemaKeys.map(async (key, index): Promise<Schema | undefined> => {\r\n if (index % 2 === 0) {\r\n // Use getSchema() for even indices\r\n if (!key)\r\n return undefined;\r\n\r\n const schema = await context.getSchema(key, SchemaMatchType.Latest);\r\n return schema;\r\n } else {\r\n // Use getSchemaSync() for odd indices\r\n if (!key)\r\n return undefined;\r\n\r\n const schema = context.getSchemaSync(key, SchemaMatchType.Latest);\r\n return schema;\r\n }\r\n });\r\n const asyncSchemas = await Promise.all(schemaPromises);\r\n\r\n for (let i = 0; i < schemaKeys.length; i++) {\r\n const syncSchema = syncSchemas[i];\r\n expect(syncSchema).not.to.be.undefined;\r\n const syncXML = await SchemaXml.writeString(syncSchema!);\r\n\r\n const asyncSchema = asyncSchemas[i];\r\n expect(asyncSchema).not.to.be.undefined;\r\n const asyncXML = await SchemaXml.writeString(asyncSchema!);\r\n expect(asyncXML).to.deep.equal(syncXML);\r\n }\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"ConcurrentGetSchemaXml.test.js","sourceRoot":"","sources":["../../../src/test/ConcurrentGetSchemaXml.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert, expect } from \"chai\";\r\nimport * as fs from \"fs\";\r\nimport * as path from \"path\";\r\nimport { Schema, SchemaContext, SchemaKey, SchemaMatchType } from \"@itwin/ecschema-metadata\";\r\nimport { SchemaXmlFileLocater } from \"../SchemaXmlFileLocater\";\r\nimport { StubSchemaXmlFileLocater } from \"../StubSchemaXmlFileLocater\";\r\nimport { SchemaXml } from \"../SchemaXml\";\r\nimport { SchemaXmlStringLocater } from \"../SchemaXmlStringLocater\";\r\n\r\ndescribe(\"Concurrent XML schema deserialization\", () => {\r\n const assetDir: string = path.join(__dirname, \"assets\");\r\n const schemaFolder = path.join(__dirname, \"assets\", \"xml\");\r\n\r\n const schemaKeys: SchemaKey[] = [];\r\n let context: SchemaContext;\r\n let contextSync: SchemaContext;\r\n let syncSchemas: Array<Schema | undefined> = [];\r\n\r\n const locater = new SchemaXmlFileLocater();\r\n const helperLocater = new StubSchemaXmlFileLocater();\r\n\r\n before(() => {\r\n if (!fs.existsSync(assetDir))\r\n fs.mkdirSync(assetDir);\r\n if (!fs.existsSync(schemaFolder))\r\n fs.mkdirSync(schemaFolder);\r\n\r\n copySchemasToAssetsDir();\r\n\r\n // Deserialize schemas synchronously/serially as standard to compare to\r\n contextSync = new SchemaContext();\r\n locater.addSchemaSearchPath(schemaFolder);\r\n contextSync.addLocater(locater);\r\n\r\n const schemaFiles = fs.readdirSync(schemaFolder);\r\n schemaFiles.forEach((fileName) => {\r\n const schemaFile = path.join(schemaFolder, fileName);\r\n const key = helperLocater.getSchemaKey(fs.readFileSync(schemaFile, \"utf-8\"));\r\n\r\n schemaKeys.push(key);\r\n });\r\n\r\n syncSchemas = schemaKeys.map((key): Schema | undefined => {\r\n if (!key)\r\n return undefined;\r\n\r\n const schema = contextSync.getSchemaSync(key, SchemaMatchType.Latest);\r\n return schema;\r\n });\r\n });\r\n\r\n beforeEach(() => {\r\n context = new SchemaContext();\r\n context.addLocater(locater);\r\n });\r\n\r\n function getSchemaPathFromPackage(packageName: string, schemaFileName: string): string {\r\n const schemaFile = path.join(__dirname, \"..\", \"..\", \"..\", \"node_modules\", \"@bentley\", packageName, schemaFileName);\r\n return schemaFile;\r\n }\r\n\r\n function copySchemasToAssetsDir() {\r\n // Copy Schemas that we need for testing\r\n fs.copyFileSync(getSchemaPathFromPackage(\"aec-units-schema\", \"AecUnits.ecschema.xml\"), path.join(schemaFolder, \"AecUnits.ecschema.xml\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"bis-custom-attributes-schema\", \"BisCustomAttributes.ecschema.xml\"), path.join(schemaFolder, \"BisCustomAttributes.ecschema.xml\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"ecdb-map-schema\", \"ECDbMap.ecschema.xml\"), path.join(schemaFolder, \"ECDbMap.ecschema.xml\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"ecdb-schema-policies-schema\", \"ECDbSchemaPolicies.ecschema.xml\"), path.join(schemaFolder, \"ECDbSchemaPolicies.ecschema.xml\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"formats-schema\", \"Formats.ecschema.xml\"), path.join(schemaFolder, \"Formats.ecschema.xml\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"units-schema\", \"Units.ecschema.xml\"), path.join(schemaFolder, \"Units.ecschema.xml\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"core-custom-attributes-schema\", \"CoreCustomAttributes.ecschema.xml\"), path.join(schemaFolder, \"CoreCustomAttributes.ecschema.xml\"));\r\n fs.copyFileSync(getSchemaPathFromPackage(\"bis-core-schema\", \"BisCore.ecschema.xml\"), path.join(schemaFolder, \"BisCore.ecschema.xml\"));\r\n }\r\n\r\n const loadSchemaString = (schemaName: string) => {\r\n const searchPath = path.join(__dirname, \"assets\", \"xml\", `${schemaName}.ecschema.xml`);\r\n const file = fs.readFileSync(searchPath);\r\n return file.toString();\r\n };\r\n\r\n it(\"should match schemas deserialized concurrently with schemas deserialized serially\", async () => {\r\n const schemaPromises = schemaKeys.map(async (key): Promise<Schema | undefined> => {\r\n if (!key)\r\n return undefined;\r\n\r\n const schema = await context.getSchema(key, SchemaMatchType.Latest);\r\n return schema;\r\n });\r\n const asyncSchemas = await Promise.all(schemaPromises);\r\n\r\n for (let i = 0; i < schemaKeys.length; i++) {\r\n const syncSchema = syncSchemas[i];\r\n expect(syncSchema).not.to.be.undefined;\r\n const syncXML = await SchemaXml.writeString(syncSchema!);\r\n\r\n const asyncSchema = asyncSchemas[i];\r\n expect(asyncSchema).not.to.be.undefined;\r\n const asyncXML = await SchemaXml.writeString(asyncSchema!);\r\n expect(asyncXML).to.deep.equal(syncXML);\r\n }\r\n });\r\n\r\n it(\"should be able to mix getSchema and getSchemaSync\", async () => {\r\n const schemaPromises = schemaKeys.map(async (key, index): Promise<Schema | undefined> => {\r\n if (index % 2 === 0) {\r\n // Use getSchema() for even indices\r\n if (!key)\r\n return undefined;\r\n\r\n const schema = await context.getSchema(key, SchemaMatchType.Latest);\r\n return schema;\r\n } else {\r\n // Use getSchemaSync() for odd indices\r\n if (!key)\r\n return undefined;\r\n\r\n const schema = context.getSchemaSync(key, SchemaMatchType.Latest);\r\n return schema;\r\n }\r\n });\r\n const asyncSchemas = await Promise.all(schemaPromises);\r\n\r\n for (let i = 0; i < schemaKeys.length; i++) {\r\n const syncSchema = syncSchemas[i];\r\n expect(syncSchema).not.to.be.undefined;\r\n const syncXML = await SchemaXml.writeString(syncSchema!);\r\n\r\n const asyncSchema = asyncSchemas[i];\r\n expect(asyncSchema).not.to.be.undefined;\r\n const asyncXML = await SchemaXml.writeString(asyncSchema!);\r\n expect(asyncXML).to.deep.equal(syncXML);\r\n }\r\n });\r\n\r\n it(\"Concurrently get BisCore with SchemaXmlFileLocater\", async () => {\r\n const schemaContext = new SchemaContext();\r\n const xmlFileLocater = new SchemaXmlFileLocater();\r\n xmlFileLocater.addSchemaSearchPath(schemaFolder);\r\n schemaContext.addLocater(xmlFileLocater);\r\n\r\n const schemas = await Promise.all(\r\n [...Array(100).keys()].map(async () => {\r\n return schemaContext.getSchema(new SchemaKey(\"BisCore\"));\r\n }),\r\n );\r\n expect(schemas.length).to.equal(100);\r\n schemas.forEach((schema) => {\r\n assert(schema !== undefined);\r\n expect(schema.fullName).to.equal(\"BisCore\");\r\n });\r\n });\r\n\r\n it(\"Concurrently get a schema and it's referenced schema with SchemaXmlFileLocater\", async () => {\r\n const schemaContext = new SchemaContext();\r\n const xmlFileLocater = new SchemaXmlFileLocater();\r\n xmlFileLocater.addSchemaSearchPath(schemaFolder);\r\n schemaContext.addLocater(xmlFileLocater);\r\n\r\n let getBisCoreFirst = 0;\r\n const schemas = await Promise.all(\r\n [...Array(2).keys()].map(async () => {\r\n if (getBisCoreFirst === 0) {\r\n getBisCoreFirst = 1;\r\n return schemaContext.getSchema(new SchemaKey(\"BisCore\"));\r\n }\r\n return schemaContext.getSchema(new SchemaKey(\"CoreCustomAttributes\"));\r\n }),\r\n );\r\n expect(schemas.length).to.equal(2);\r\n schemas.forEach((schema) => {\r\n expect(schema).to.not.be.undefined;\r\n });\r\n });\r\n\r\n it(\"Concurrently get BisCore with SchemaXmlStringLocater\", async () => {\r\n const schemaContext = new SchemaContext();\r\n const xmlStringLocater = new SchemaXmlStringLocater();\r\n schemaContext.addLocater(xmlStringLocater);\r\n\r\n xmlStringLocater.addSchemaString(loadSchemaString(\"CoreCustomAttributes\"));\r\n xmlStringLocater.addSchemaString(loadSchemaString(\"ECDbMap\"));\r\n xmlStringLocater.addSchemaString(loadSchemaString(\"ECDbSchemaPolicies\"));\r\n xmlStringLocater.addSchemaString(loadSchemaString(\"BisCore\"));\r\n\r\n const schemas = await Promise.all(\r\n [...Array(100).keys()].map(async () => {\r\n return schemaContext.getSchema(new SchemaKey(\"BisCore\"));\r\n }),\r\n );\r\n expect(schemas.length).to.equal(100);\r\n schemas.forEach((schema) => {\r\n assert(schema !== undefined);\r\n expect(schema.fullName).to.equal(\"BisCore\");\r\n });\r\n });\r\n\r\n it(\"Concurrently get a schema and it's referenced schema with SchemaXmlStringLocater\", async () => {\r\n const schemaContext = new SchemaContext();\r\n const xmlStringLocater = new SchemaXmlStringLocater();\r\n schemaContext.addLocater(xmlStringLocater);\r\n\r\n xmlStringLocater.addSchemaString(loadSchemaString(\"CoreCustomAttributes\"));\r\n xmlStringLocater.addSchemaString(loadSchemaString(\"ECDbMap\"));\r\n xmlStringLocater.addSchemaString(loadSchemaString(\"ECDbSchemaPolicies\"));\r\n xmlStringLocater.addSchemaString(loadSchemaString(\"BisCore\"));\r\n\r\n let getBisCoreFirst = 0;\r\n const schemas = await Promise.all(\r\n [...Array(2).keys()].map(async () => {\r\n if (getBisCoreFirst === 0) {\r\n getBisCoreFirst = 1;\r\n return schemaContext.getSchema(new SchemaKey(\"BisCore\"));\r\n }\r\n return schemaContext.getSchema(new SchemaKey(\"CoreCustomAttributes\"));\r\n }),\r\n );\r\n expect(schemas.length).to.equal(2);\r\n schemas.forEach((schema) => {\r\n expect(schema).to.not.be.undefined;\r\n });\r\n });\r\n});\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaJsonFileLocator.test.js","sourceRoot":"","sources":["../../../src/test/SchemaJsonFileLocator.test.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;;AAE/F,+BAA8B;AAC9B,6BAA6B;AAC7B,+CAA+C;AAE/C,oEAAiE;AAEjE,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,IAAI,OAA8B,CAAC;IACnC,IAAI,OAAyB,CAAC;IAE9B,UAAU,CAAC,GAAG,EAAE;QACd,OAAO,GAAG,IAAI,6CAAqB,EAAE,CAAC;QAEtC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC5D,OAAO,GAAG,IAAI,EAAE,CAAC,aAAa,EAAE,CAAC;QACjC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,SAAS,GAAG,IAAI,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE5E,aAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzB,aAAM,CAAC,WAAW,CAAC,MAAO,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACtD,aAAM,CAAC,WAAW,CAAC,MAAO,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,UAAU,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,MAAM,SAAS,GAAG,IAAI,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE1E,aAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzB,aAAM,CAAC,WAAW,CAAC,MAAO,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACtD,aAAM,CAAC,WAAW,CAAC,MAAO,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,UAAU,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,SAAS,GAAG,IAAI,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEvD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;QACtG,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;QACtG,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC9E,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE9E,qDAAqD;QACrD,aAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpC,aAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpC,aAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,SAAS,GAAG,IAAI,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAEvD,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;QACpG,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC;QACpG,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC5E,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAE5E,qDAAqD;QACrD,aAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpC,aAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACpC,aAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,KAAK,IAAI,EAAE;QACjE,MAAM,SAAS,GAAG,IAAI,EAAE,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACrF,aAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,SAAS,GAAG,IAAI,EAAE,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAEpD,IAAI;YACF,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SACvE;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,KAAK,GAAG,CAAsB,CAAC;YACrC,aAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YACxE,OAAO;SACR;QAED,aAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,8BAA8B,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,SAAS,GAAG,IAAI,EAAE,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAEvD,IAAI;YACF,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;SACvE;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,KAAK,GAAG,CAAsB,CAAC;YACrC,aAAM,CAAC,WAAW,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;YACxE,OAAO;SACR;QAED,aAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,8BAA8B,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAE9G,aAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvB,MAAM,GAAG,GAAG,IAAK,CAAC,SAA0B,CAAC;QAC7C,aAAM,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACxC,aAAM,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,UAAU,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,aAAM,CAAC,WAAW,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACvH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjH,aAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACzB,aAAM,CAAC,WAAW,CAAC,MAAO,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACtD,aAAM,CAAC,WAAW,CAAC,MAAO,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,UAAU,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;QAE9H,aAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvB,aAAM,CAAC,WAAW,CAAC,IAAK,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACpD,aAAM,CAAC,WAAW,CAAC,IAAK,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,UAAU,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,aAAM,CAAC,WAAW,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC,CAAC;IACvI,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;QAE7H,aAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvB,aAAM,CAAC,WAAW,CAAC,IAAK,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACpD,aAAM,CAAC,WAAW,CAAC,IAAK,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,UAAU,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,aAAM,CAAC,WAAW,CAAC,MAAM,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC;IACtI,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert } from \"chai\";\r\nimport * as path from \"path\";\r\nimport * as EC from \"@itwin/ecschema-metadata\";\r\nimport { FileSchemaKey } from \"../SchemaFileLocater\";\r\nimport { SchemaJsonFileLocater } from \"../SchemaJsonFileLocater\";\r\n\r\ndescribe(\"SchemaJsonFileLocater tests: \", () => {\r\n let locater: SchemaJsonFileLocater;\r\n let context: EC.SchemaContext;\r\n\r\n beforeEach(() => {\r\n locater = new SchemaJsonFileLocater();\r\n\r\n locater.addSchemaSearchPath(path.join(__dirname, \"assets\"));\r\n context = new EC.SchemaContext();\r\n context.addLocater(locater);\r\n });\r\n\r\n it(\"locate valid schema with multiple references\", async () => {\r\n const schemaKey = new EC.SchemaKey(\"SchemaA\", 1, 1, 1);\r\n const schema = await context.getSchema(schemaKey, EC.SchemaMatchType.Exact);\r\n\r\n assert.isDefined(schema);\r\n assert.strictEqual(schema!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(schema!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"locate valid schema with multiple references synchronously\", () => {\r\n const schemaKey = new EC.SchemaKey(\"SchemaA\", 1, 1, 1);\r\n const schema = context.getSchemaSync(schemaKey, EC.SchemaMatchType.Exact);\r\n\r\n assert.isDefined(schema);\r\n assert.strictEqual(schema!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(schema!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema called multiple times for same schema\", async () => {\r\n const schemaKey = new EC.SchemaKey(\"SchemaD\", 4, 4, 4);\r\n\r\n const locater1 = await locater.getSchema(schemaKey, EC.SchemaMatchType.Exact, new EC.SchemaContext());\r\n const locater2 = await locater.getSchema(schemaKey, EC.SchemaMatchType.Exact, new EC.SchemaContext());\r\n const context1 = await context.getSchema(schemaKey, EC.SchemaMatchType.Exact);\r\n const context2 = await context.getSchema(schemaKey, EC.SchemaMatchType.Exact);\r\n\r\n // locater should not cache, but context should cache\r\n assert.notEqual(locater1, locater2);\r\n assert.notEqual(locater1, context1);\r\n assert.strictEqual(context1, context2);\r\n });\r\n\r\n it(\"getSchema called multiple times for same schema synchronously\", () => {\r\n const schemaKey = new EC.SchemaKey(\"SchemaD\", 4, 4, 4);\r\n\r\n const locater1 = locater.getSchemaSync(schemaKey, EC.SchemaMatchType.Exact, new EC.SchemaContext());\r\n const locater2 = locater.getSchemaSync(schemaKey, EC.SchemaMatchType.Exact, new EC.SchemaContext());\r\n const context1 = context.getSchemaSync(schemaKey, EC.SchemaMatchType.Exact);\r\n const context2 = context.getSchemaSync(schemaKey, EC.SchemaMatchType.Exact);\r\n\r\n // locater should not cache, but context should cache\r\n assert.notEqual(locater1, locater2);\r\n assert.notEqual(locater1, context1);\r\n assert.strictEqual(context1, context2);\r\n });\r\n\r\n it(\"getSchema which does not exist, returns undefined\", async () => {\r\n const schemaKey = new EC.SchemaKey(\"DoesNotExist\");\r\n const result = await locater.getSchema(schemaKey, EC.SchemaMatchType.Exact, context);\r\n assert.isUndefined(result);\r\n });\r\n\r\n it(\"loadSchema from file, bad schema name, throws\", async () => {\r\n const schemaKey = new EC.SchemaKey(\"BadSchemaName\");\r\n\r\n try {\r\n await locater.getSchema(schemaKey, EC.SchemaMatchType.Exact, context);\r\n } catch (e) {\r\n const error = e as EC.ECObjectsError;\r\n assert.strictEqual(error.errorNumber, EC.ECObjectsStatus.InvalidECJson);\r\n return;\r\n }\r\n\r\n assert.fail(0, 1, \"Expected ECObjects exception\");\r\n });\r\n\r\n it(\"loadSchema from file, bad schema version, throws\", async () => {\r\n const schemaKey = new EC.SchemaKey(\"BadSchemaVersion\");\r\n\r\n try {\r\n await locater.getSchema(schemaKey, EC.SchemaMatchType.Exact, context);\r\n } catch (e) {\r\n const error = e as EC.ECObjectsError;\r\n assert.strictEqual(error.errorNumber, EC.ECObjectsStatus.InvalidECJson);\r\n return;\r\n }\r\n\r\n assert.fail(0, 1, \"Expected ECObjects exception\");\r\n });\r\n\r\n it(\"getSchema, full version, succeeds\", async () => {\r\n const stub = await locater.getSchema(new EC.SchemaKey(\"SchemaA\", 1, 1, 1), EC.SchemaMatchType.Exact, context);\r\n\r\n assert.isDefined(stub);\r\n const key = stub!.schemaKey as FileSchemaKey;\r\n assert.strictEqual(key.name, \"SchemaA\");\r\n assert.strictEqual(key.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema, exact version, wrong minor, fails\", async () => {\r\n assert.isUndefined(await locater.getSchema(new EC.SchemaKey(\"SchemaA\", 1, 1, 2), EC.SchemaMatchType.Exact, context));\r\n });\r\n\r\n it(\"getSchema, latest, succeeds\", async () => {\r\n const schema = await locater.getSchema(new EC.SchemaKey(\"SchemaA\", 1, 1, 0), EC.SchemaMatchType.Latest, context);\r\n assert.isDefined(schema);\r\n assert.strictEqual(schema!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(schema!.schemaKey.version.toString(), \"02.00.02\");\r\n });\r\n\r\n it(\"getSchema, latest write compatible, succeeds\", async () => {\r\n const stub = await locater.getSchema(new EC.SchemaKey(\"SchemaA\", 1, 1, 0), EC.SchemaMatchType.LatestWriteCompatible, context);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema, latest write compatible, write version wrong, fails\", async () => {\r\n assert.isUndefined(await locater.getSchema(new EC.SchemaKey(\"SchemaA\", 1, 2, 0), EC.SchemaMatchType.LatestWriteCompatible, context));\r\n });\r\n\r\n it(\"getSchema, latest read compatible, succeeds\", async () => {\r\n const stub = await locater.getSchema(new EC.SchemaKey(\"SchemaA\", 1, 0, 0), EC.SchemaMatchType.LatestReadCompatible, context);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema, latest read compatible, read version wrong, fails\", async () => {\r\n assert.isUndefined(await locater.getSchema(new EC.SchemaKey(\"SchemaA\", 2, 1, 1), EC.SchemaMatchType.LatestReadCompatible, context));\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"SchemaJsonFileLocator.test.js","sourceRoot":"","sources":["../../../src/test/SchemaJsonFileLocator.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert } from \"chai\";\r\nimport * as path from \"path\";\r\nimport * as EC from \"@itwin/ecschema-metadata\";\r\nimport { FileSchemaKey } from \"../SchemaFileLocater\";\r\nimport { SchemaJsonFileLocater } from \"../SchemaJsonFileLocater\";\r\n\r\ndescribe(\"SchemaJsonFileLocater tests: \", () => {\r\n let locater: SchemaJsonFileLocater;\r\n let context: EC.SchemaContext;\r\n\r\n beforeEach(() => {\r\n locater = new SchemaJsonFileLocater();\r\n\r\n locater.addSchemaSearchPath(path.join(__dirname, \"assets\"));\r\n context = new EC.SchemaContext();\r\n context.addLocater(locater);\r\n });\r\n\r\n it(\"locate valid schema with multiple references\", async () => {\r\n const schemaKey = new EC.SchemaKey(\"SchemaA\", 1, 1, 1);\r\n const schema = await context.getSchema(schemaKey, EC.SchemaMatchType.Exact);\r\n\r\n assert.isDefined(schema);\r\n assert.strictEqual(schema!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(schema!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"locate valid schema with multiple references synchronously\", () => {\r\n const schemaKey = new EC.SchemaKey(\"SchemaA\", 1, 1, 1);\r\n const schema = context.getSchemaSync(schemaKey, EC.SchemaMatchType.Exact);\r\n\r\n assert.isDefined(schema);\r\n assert.strictEqual(schema!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(schema!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema called multiple times for same schema\", async () => {\r\n const schemaKey = new EC.SchemaKey(\"SchemaD\", 4, 4, 4);\r\n\r\n const locater1 = await locater.getSchema(schemaKey, EC.SchemaMatchType.Exact, new EC.SchemaContext());\r\n const locater2 = await locater.getSchema(schemaKey, EC.SchemaMatchType.Exact, new EC.SchemaContext());\r\n const context1 = await context.getSchema(schemaKey, EC.SchemaMatchType.Exact);\r\n const context2 = await context.getSchema(schemaKey, EC.SchemaMatchType.Exact);\r\n\r\n // locater should not cache, but context should cache\r\n assert.notEqual(locater1, locater2);\r\n assert.notEqual(locater1, context1);\r\n assert.strictEqual(context1, context2);\r\n });\r\n\r\n it(\"getSchema called multiple times for same schema synchronously\", () => {\r\n const schemaKey = new EC.SchemaKey(\"SchemaD\", 4, 4, 4);\r\n\r\n const locater1 = locater.getSchemaSync(schemaKey, EC.SchemaMatchType.Exact, new EC.SchemaContext());\r\n const locater2 = locater.getSchemaSync(schemaKey, EC.SchemaMatchType.Exact, new EC.SchemaContext());\r\n const context1 = context.getSchemaSync(schemaKey, EC.SchemaMatchType.Exact);\r\n const context2 = context.getSchemaSync(schemaKey, EC.SchemaMatchType.Exact);\r\n\r\n // locater should not cache, but context should cache\r\n assert.notEqual(locater1, locater2);\r\n assert.notEqual(locater1, context1);\r\n assert.strictEqual(context1, context2);\r\n });\r\n\r\n it(\"getSchema which does not exist, returns undefined\", async () => {\r\n const schemaKey = new EC.SchemaKey(\"DoesNotExist\");\r\n const result = await locater.getSchema(schemaKey, EC.SchemaMatchType.Exact, context);\r\n assert.isUndefined(result);\r\n });\r\n\r\n it(\"loadSchema from file, bad schema name, throws\", async () => {\r\n const schemaKey = new EC.SchemaKey(\"BadSchemaName\");\r\n\r\n try {\r\n await locater.getSchema(schemaKey, EC.SchemaMatchType.Exact, context);\r\n } catch (e) {\r\n const error = e as EC.ECObjectsError;\r\n assert.strictEqual(error.errorNumber, EC.ECObjectsStatus.InvalidECJson);\r\n return;\r\n }\r\n\r\n assert.fail(0, 1, \"Expected ECObjects exception\");\r\n });\r\n\r\n it(\"loadSchema from file, bad schema version, throws\", async () => {\r\n const schemaKey = new EC.SchemaKey(\"BadSchemaVersion\");\r\n\r\n try {\r\n await locater.getSchema(schemaKey, EC.SchemaMatchType.Exact, context);\r\n } catch (e) {\r\n const error = e as EC.ECObjectsError;\r\n assert.strictEqual(error.errorNumber, EC.ECObjectsStatus.InvalidECJson);\r\n return;\r\n }\r\n\r\n assert.fail(0, 1, \"Expected ECObjects exception\");\r\n });\r\n\r\n it(\"getSchema, full version, succeeds\", async () => {\r\n const stub = await locater.getSchema(new EC.SchemaKey(\"SchemaA\", 1, 1, 1), EC.SchemaMatchType.Exact, context);\r\n\r\n assert.isDefined(stub);\r\n const key = stub!.schemaKey as FileSchemaKey;\r\n assert.strictEqual(key.name, \"SchemaA\");\r\n assert.strictEqual(key.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema, exact version, wrong minor, fails\", async () => {\r\n assert.isUndefined(await locater.getSchema(new EC.SchemaKey(\"SchemaA\", 1, 1, 2), EC.SchemaMatchType.Exact, context));\r\n });\r\n\r\n it(\"getSchema, latest, succeeds\", async () => {\r\n const schema = await locater.getSchema(new EC.SchemaKey(\"SchemaA\", 1, 1, 0), EC.SchemaMatchType.Latest, context);\r\n assert.isDefined(schema);\r\n assert.strictEqual(schema!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(schema!.schemaKey.version.toString(), \"02.00.02\");\r\n });\r\n\r\n it(\"getSchema, latest write compatible, succeeds\", async () => {\r\n const stub = await locater.getSchema(new EC.SchemaKey(\"SchemaA\", 1, 1, 0), EC.SchemaMatchType.LatestWriteCompatible, context);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema, latest write compatible, write version wrong, fails\", async () => {\r\n assert.isUndefined(await locater.getSchema(new EC.SchemaKey(\"SchemaA\", 1, 2, 0), EC.SchemaMatchType.LatestWriteCompatible, context));\r\n });\r\n\r\n it(\"getSchema, latest read compatible, succeeds\", async () => {\r\n const stub = await locater.getSchema(new EC.SchemaKey(\"SchemaA\", 1, 0, 0), EC.SchemaMatchType.LatestReadCompatible, context);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema, latest read compatible, read version wrong, fails\", async () => {\r\n assert.isUndefined(await locater.getSchema(new EC.SchemaKey(\"SchemaA\", 2, 1, 1), EC.SchemaMatchType.LatestReadCompatible, context));\r\n });\r\n});\r\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaXmlFileLocator.test.js","sourceRoot":"","sources":["../../../src/test/SchemaXmlFileLocator.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert, expect } from \"chai\";\r\nimport * as path from \"path\";\r\nimport { ECObjectsError, ECObjectsStatus, ECVersion, SchemaContext, SchemaKey, SchemaMatchType } from \"@itwin/ecschema-metadata\";\r\nimport { FileSchemaKey } from \"../SchemaFileLocater\";\r\nimport { SchemaXmlFileLocater } from \"../SchemaXmlFileLocater\";\r\n\r\ndescribe(\"SchemaXmlFileLocater tests:\", () => {\r\n let locater: SchemaXmlFileLocater;\r\n let context: SchemaContext;\r\n\r\n beforeEach(() => {\r\n locater = new SchemaXmlFileLocater();\r\n locater.addSchemaSearchPath(path.join(__dirname, \"assets\"));\r\n context = new SchemaContext();\r\n context.addLocater(locater);\r\n });\r\n\r\n it(\"locate valid schema with multiple references\", async () => {\r\n const schemaKey = new SchemaKey(\"SchemaA\", 1, 1, 1);\r\n const schema = await context.getSchema(schemaKey, SchemaMatchType.Exact);\r\n\r\n assert.isDefined(schema);\r\n assert.strictEqual(schema!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(schema!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"locate valid schema with multiple references synchronously\", () => {\r\n const schemaKey = new SchemaKey(\"SchemaA\", 1, 1, 1);\r\n const schema = context.getSchemaSync(schemaKey, SchemaMatchType.Exact);\r\n\r\n assert.isDefined(schema);\r\n assert.strictEqual(schema!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(schema!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema called multiple times for same schema\", async () => {\r\n const schemaKey = new SchemaKey(\"SchemaD\", 4, 4, 4);\r\n\r\n const locater1 = await locater.getSchema(schemaKey, SchemaMatchType.Exact, new SchemaContext());\r\n const locater2 = await locater.getSchema(schemaKey, SchemaMatchType.Exact, new SchemaContext());\r\n const context1 = await context.getSchema(schemaKey, SchemaMatchType.Exact);\r\n const context2 = await context.getSchema(schemaKey, SchemaMatchType.Exact);\r\n\r\n // locater should not cache, but context should cache\r\n assert.notEqual(locater1, locater2);\r\n assert.notEqual(locater1, context1);\r\n assert.strictEqual(context1, context2);\r\n });\r\n\r\n it(\"getSchema which does not exist, returns undefined\", async () => {\r\n const schemaKey = new SchemaKey(\"DoesNotExist\");\r\n\r\n assert.isUndefined(await locater.getSchema(schemaKey, SchemaMatchType.Exact, context));\r\n });\r\n\r\n it(\"loadSchema from file, bad schema tag, throws\", async () => {\r\n const schemaKey = new SchemaKey(\"BadSchemaTag\");\r\n try {\r\n await locater.getSchema(schemaKey, SchemaMatchType.Latest, context);\r\n } catch (e) {\r\n const error = e as ECObjectsError;\r\n assert.strictEqual(error.errorNumber, ECObjectsStatus.InvalidSchemaXML);\r\n return;\r\n }\r\n\r\n assert.fail(0, 1, \"Expected ECObjects exception\");\r\n });\r\n\r\n it(\"loadSchema from file, bad schema name tag, throws\", async () => {\r\n const schemaKey = new SchemaKey(\"BadSchemaNameTag\");\r\n try {\r\n await locater.getSchema(schemaKey, SchemaMatchType.Latest, context);\r\n } catch (e) {\r\n const error = e as ECObjectsError;\r\n assert.strictEqual(error.errorNumber, ECObjectsStatus.InvalidSchemaXML);\r\n return;\r\n }\r\n\r\n assert.fail(0, 1, \"Expected ECObjects exception\");\r\n });\r\n\r\n it(\"loadSchema from file, bad schema version tag, throws\", async () => {\r\n const schemaKey = new SchemaKey(\"BadSchemaVersionTag\");\r\n\r\n try {\r\n await locater.getSchema(schemaKey, SchemaMatchType.Latest, context);\r\n } catch (e) {\r\n const error = e as ECObjectsError;\r\n assert.strictEqual(error.errorNumber, ECObjectsStatus.InvalidSchemaXML);\r\n return;\r\n }\r\n\r\n assert.fail(0, 1, \"Expected ECObjects exception\");\r\n });\r\n\r\n it(\"getSchema, full version, succeeds\", async () => {\r\n const stub = await locater.getSchema(new SchemaKey(\"SchemaA\", 1, 1, 1), SchemaMatchType.Exact, context);\r\n assert.isDefined(stub);\r\n const key = stub!.schemaKey as FileSchemaKey;\r\n assert.strictEqual(key.name, \"SchemaA\");\r\n assert.strictEqual(key.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema, reference does not exist, throws.\", async () => {\r\n try {\r\n await locater.getSchema(new SchemaKey(\"RefDoesNotExist\", 1, 1, 1), SchemaMatchType.Exact, context);\r\n } catch (e) {\r\n const error = e as ECObjectsError;\r\n assert.strictEqual(error.errorNumber, ECObjectsStatus.UnableToLocateSchema);\r\n return;\r\n }\r\n\r\n assert.fail();\r\n });\r\n\r\n it(\"getSchema, references set\", async () => {\r\n const schemaA = await context.getSchema(new SchemaKey(\"SchemaA\", 1, 1, 1), SchemaMatchType.Exact);\r\n const schemaB = await context.getSchema(new SchemaKey(\"SchemaB\", 2, 2, 2), SchemaMatchType.Exact);\r\n const schemaC = await context.getSchema(new SchemaKey(\"SchemaC\", 3, 3, 3), SchemaMatchType.Exact);\r\n const schemaD = await context.getSchema(new SchemaKey(\"SchemaD\", 4, 4, 4), SchemaMatchType.Exact);\r\n\r\n assert.isDefined(schemaA);\r\n assert.strictEqual(schemaA!.references.length, 2);\r\n assert.deepEqual(schemaA!.references[0], schemaC);\r\n assert.deepEqual(schemaA!.references[1], schemaB);\r\n assert.deepEqual(schemaA!.references[0].references[0], schemaD);\r\n assert.deepEqual(schemaA!.references[1].references[0], schemaC);\r\n assert.deepEqual(schemaA!.references[1].references[1], schemaD);\r\n });\r\n\r\n it(\"getSchema, exact version, wrong minor, fails\", async () => {\r\n assert.isUndefined(await context.getSchema(new SchemaKey(\"SchemaA\", 1, 1, 2), SchemaMatchType.Exact));\r\n });\r\n\r\n it(\"getSchema, latest, succeeds\", async () => {\r\n const stub = await locater.getSchema(new SchemaKey(\"SchemaA\", 1, 1, 0), SchemaMatchType.Latest, context);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"02.00.02\");\r\n });\r\n\r\n it(\"getSchema, latest write compatible, succeeds\", async () => {\r\n const stub = await context.getSchema(new SchemaKey(\"SchemaA\", 1, 1, 0), SchemaMatchType.LatestWriteCompatible);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema, latest write compatible, write version wrong, fails\", async () => {\r\n assert.isUndefined(await context.getSchema(new SchemaKey(\"SchemaA\", 1, 2, 0), SchemaMatchType.LatestWriteCompatible));\r\n });\r\n\r\n it(\"getSchema, latest read compatible, succeeds\", async () => {\r\n const stub = await context.getSchema(new SchemaKey(\"SchemaA\", 1, 0, 0), SchemaMatchType.LatestReadCompatible);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema, latest read compatible, read version wrong, fails\", async () => {\r\n assert.isUndefined(await context.getSchema(new SchemaKey(\"SchemaA\", 2, 1, 1), SchemaMatchType.LatestReadCompatible));\r\n });\r\n\r\n it(\"sync - should ignore commented out schema references\", () => {\r\n const stub = context.getSchemaSync(new SchemaKey(\"RefCommentedOut\", 1, 1, 1), SchemaMatchType.LatestReadCompatible);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"RefCommentedOut\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"async - should ignore commented out schema references\", async () => {\r\n const stub = await context.getSchema(new SchemaKey(\"RefCommentedOut\", 1, 1, 1), SchemaMatchType.LatestReadCompatible);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"RefCommentedOut\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchemaKey, valid version and name, succeeds\", () => {\r\n const schemaXml = `<ECSchema schemaName=\"SchemaA\" version=\"1.1.1\"> </ECSchema>`;\r\n const key = locater.getSchemaKey(schemaXml);\r\n assert.deepEqual(key, new SchemaKey(\"SchemaA\", new ECVersion(1, 1, 1)));\r\n });\r\n it(\"getSchemaKey, invalid xml, throws\", () => {\r\n const schemaXml = `<ECSchemaBad schemaName=\"SchemaA\" version=\"1.1.1\"> </ECSchemaBad>`;\r\n expect(() => locater.getSchemaKey(schemaXml)).to.throw(ECObjectsError, `Could not find '<ECSchema>' tag in the given file`);\r\n });\r\n it(\"getSchemaKey, invalid schemaName attribute, throws\", () => {\r\n const schemaXml = `<ECSchema schemaNameBad=\"SchemaA\" version=\"1.1.1\"> </ECSchema>`;\r\n expect(() => locater.getSchemaKey(schemaXml)).to.throw(ECObjectsError, `Could not find the ECSchema 'schemaName' or 'version' tag in the given file`);\r\n });\r\n it(\"getSchemaKey, invalid schemaName, throws\", () => {\r\n const schemaXml = `<ECSchema version=\"1.1.1\" schemaName=\"\"> </ECSchema>`;\r\n expect(() => locater.getSchemaKey(schemaXml)).to.throw(ECObjectsError, `Could not find the ECSchema 'schemaName' or 'version' tag in the given file`);\r\n });\r\n it(\"getSchemaKey, invalid version attribute, throws\", () => {\r\n const schemaXml = `<ECSchema schemaName=\"SchemaA\" versionBad=\"1.1.1\"> </ECSchema>`;\r\n expect(() => locater.getSchemaKey(schemaXml)).to.throw(ECObjectsError, `Could not find the ECSchema 'schemaName' or 'version' tag in the given file`);\r\n });\r\n it(\"getSchemaKey, invalid version, throws\", () => {\r\n const schemaXml = `<ECSchema schemaName=\"SchemaA\" version=\"\"> </ECSchema>`;\r\n expect(() => locater.getSchemaKey(schemaXml)).to.throw(ECObjectsError, `Could not find the ECSchema 'schemaName' or 'version' tag in the given file`);\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"SchemaXmlFileLocator.test.js","sourceRoot":"","sources":["../../../src/test/SchemaXmlFileLocator.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert, expect } from \"chai\";\r\nimport * as path from \"path\";\r\nimport { ECObjectsError, ECObjectsStatus, ECVersion, SchemaContext, SchemaKey, SchemaMatchType } from \"@itwin/ecschema-metadata\";\r\nimport { FileSchemaKey } from \"../SchemaFileLocater\";\r\nimport { SchemaXmlFileLocater } from \"../SchemaXmlFileLocater\";\r\n\r\ndescribe(\"SchemaXmlFileLocater tests:\", () => {\r\n let locater: SchemaXmlFileLocater;\r\n let context: SchemaContext;\r\n\r\n beforeEach(() => {\r\n locater = new SchemaXmlFileLocater();\r\n locater.addSchemaSearchPath(path.join(__dirname, \"assets\"));\r\n context = new SchemaContext();\r\n context.addLocater(locater);\r\n });\r\n\r\n it(\"locate valid schema with multiple references\", async () => {\r\n const schemaKey = new SchemaKey(\"SchemaA\", 1, 1, 1);\r\n const schema = await context.getSchema(schemaKey, SchemaMatchType.Exact);\r\n\r\n assert.isDefined(schema);\r\n assert.strictEqual(schema!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(schema!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"locate valid schema with multiple references synchronously\", () => {\r\n const schemaKey = new SchemaKey(\"SchemaA\", 1, 1, 1);\r\n const schema = context.getSchemaSync(schemaKey, SchemaMatchType.Exact);\r\n\r\n assert.isDefined(schema);\r\n assert.strictEqual(schema!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(schema!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema called multiple times for same schema\", async () => {\r\n const schemaKey = new SchemaKey(\"SchemaD\", 4, 4, 4);\r\n\r\n const locater1 = await locater.getSchema(schemaKey, SchemaMatchType.Exact, new SchemaContext());\r\n const locater2 = await locater.getSchema(schemaKey, SchemaMatchType.Exact, new SchemaContext());\r\n const context1 = await context.getSchema(schemaKey, SchemaMatchType.Exact);\r\n const context2 = await context.getSchema(schemaKey, SchemaMatchType.Exact);\r\n\r\n // locater should not cache, but context should cache\r\n assert.notEqual(locater1, locater2);\r\n assert.notEqual(locater1, context1);\r\n assert.strictEqual(context1, context2);\r\n });\r\n\r\n it(\"getSchema which does not exist, returns undefined\", async () => {\r\n const schemaKey = new SchemaKey(\"DoesNotExist\");\r\n\r\n assert.isUndefined(await locater.getSchema(schemaKey, SchemaMatchType.Exact, context));\r\n });\r\n\r\n it(\"loadSchema from file, bad schema tag, throws\", async () => {\r\n const schemaKey = new SchemaKey(\"BadSchemaTag\");\r\n try {\r\n await locater.getSchema(schemaKey, SchemaMatchType.Latest, context);\r\n } catch (e) {\r\n const error = e as ECObjectsError;\r\n assert.strictEqual(error.errorNumber, ECObjectsStatus.InvalidSchemaXML);\r\n return;\r\n }\r\n\r\n assert.fail(0, 1, \"Expected ECObjects exception\");\r\n });\r\n\r\n it(\"loadSchema from file, bad schema name tag, throws\", async () => {\r\n const schemaKey = new SchemaKey(\"BadSchemaNameTag\");\r\n try {\r\n await locater.getSchema(schemaKey, SchemaMatchType.Latest, context);\r\n } catch (e) {\r\n const error = e as ECObjectsError;\r\n assert.strictEqual(error.errorNumber, ECObjectsStatus.InvalidSchemaXML);\r\n return;\r\n }\r\n\r\n assert.fail(0, 1, \"Expected ECObjects exception\");\r\n });\r\n\r\n it(\"loadSchema from file, bad schema version tag, throws\", async () => {\r\n const schemaKey = new SchemaKey(\"BadSchemaVersionTag\");\r\n\r\n try {\r\n await locater.getSchema(schemaKey, SchemaMatchType.Latest, context);\r\n } catch (e) {\r\n const error = e as ECObjectsError;\r\n assert.strictEqual(error.errorNumber, ECObjectsStatus.InvalidSchemaXML);\r\n return;\r\n }\r\n\r\n assert.fail(0, 1, \"Expected ECObjects exception\");\r\n });\r\n\r\n it(\"getSchema, full version, succeeds\", async () => {\r\n const stub = await locater.getSchema(new SchemaKey(\"SchemaA\", 1, 1, 1), SchemaMatchType.Exact, context);\r\n assert.isDefined(stub);\r\n const key = stub!.schemaKey as FileSchemaKey;\r\n assert.strictEqual(key.name, \"SchemaA\");\r\n assert.strictEqual(key.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema, reference does not exist, throws.\", async () => {\r\n try {\r\n await locater.getSchema(new SchemaKey(\"RefDoesNotExist\", 1, 1, 1), SchemaMatchType.Exact, context);\r\n } catch (e) {\r\n const error = e as ECObjectsError;\r\n assert.strictEqual(error.errorNumber, ECObjectsStatus.UnableToLocateSchema);\r\n return;\r\n }\r\n\r\n assert.fail();\r\n });\r\n\r\n it(\"getSchema, references set\", async () => {\r\n const schemaA = await context.getSchema(new SchemaKey(\"SchemaA\", 1, 1, 1), SchemaMatchType.Exact);\r\n const schemaB = await context.getSchema(new SchemaKey(\"SchemaB\", 2, 2, 2), SchemaMatchType.Exact);\r\n const schemaC = await context.getSchema(new SchemaKey(\"SchemaC\", 3, 3, 3), SchemaMatchType.Exact);\r\n const schemaD = await context.getSchema(new SchemaKey(\"SchemaD\", 4, 4, 4), SchemaMatchType.Exact);\r\n\r\n assert.isDefined(schemaA);\r\n assert.strictEqual(schemaA!.references.length, 2);\r\n assert.deepEqual(schemaA!.references[0], schemaC);\r\n assert.deepEqual(schemaA!.references[1], schemaB);\r\n assert.deepEqual(schemaA!.references[0].references[0], schemaD);\r\n assert.deepEqual(schemaA!.references[1].references[0], schemaC);\r\n assert.deepEqual(schemaA!.references[1].references[1], schemaD);\r\n });\r\n\r\n it(\"getSchema, exact version, wrong minor, fails\", async () => {\r\n assert.isUndefined(await context.getSchema(new SchemaKey(\"SchemaA\", 1, 1, 2), SchemaMatchType.Exact));\r\n });\r\n\r\n it(\"getSchema, latest, succeeds\", async () => {\r\n const stub = await locater.getSchema(new SchemaKey(\"SchemaA\", 1, 1, 0), SchemaMatchType.Latest, context);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"02.00.02\");\r\n });\r\n\r\n it(\"getSchema, latest write compatible, succeeds\", async () => {\r\n const stub = await context.getSchema(new SchemaKey(\"SchemaA\", 1, 1, 0), SchemaMatchType.LatestWriteCompatible);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema, latest write compatible, write version wrong, fails\", async () => {\r\n assert.isUndefined(await context.getSchema(new SchemaKey(\"SchemaA\", 1, 2, 0), SchemaMatchType.LatestWriteCompatible));\r\n });\r\n\r\n it(\"getSchema, latest read compatible, succeeds\", async () => {\r\n const stub = await context.getSchema(new SchemaKey(\"SchemaA\", 1, 0, 0), SchemaMatchType.LatestReadCompatible);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema, latest read compatible, read version wrong, fails\", async () => {\r\n assert.isUndefined(await context.getSchema(new SchemaKey(\"SchemaA\", 2, 1, 1), SchemaMatchType.LatestReadCompatible));\r\n });\r\n\r\n it(\"sync - should ignore commented out schema references\", () => {\r\n const stub = context.getSchemaSync(new SchemaKey(\"RefCommentedOut\", 1, 1, 1), SchemaMatchType.LatestReadCompatible);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"RefCommentedOut\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"async - should ignore commented out schema references\", async () => {\r\n const stub = await context.getSchema(new SchemaKey(\"RefCommentedOut\", 1, 1, 1), SchemaMatchType.LatestReadCompatible);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"RefCommentedOut\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchemaKey, valid version and name, succeeds\", () => {\r\n const schemaXml = `<ECSchema schemaName=\"SchemaA\" version=\"1.1.1\"> </ECSchema>`;\r\n const key = locater.getSchemaKey(schemaXml);\r\n assert.deepEqual(key, new SchemaKey(\"SchemaA\", new ECVersion(1, 1, 1)));\r\n });\r\n it(\"getSchemaKey, invalid xml, throws\", () => {\r\n const schemaXml = `<ECSchemaBad schemaName=\"SchemaA\" version=\"1.1.1\"> </ECSchemaBad>`;\r\n expect(() => locater.getSchemaKey(schemaXml)).to.throw(ECObjectsError, `Could not find '<ECSchema>' tag in the given file`);\r\n });\r\n it(\"getSchemaKey, invalid schemaName attribute, throws\", () => {\r\n const schemaXml = `<ECSchema schemaNameBad=\"SchemaA\" version=\"1.1.1\"> </ECSchema>`;\r\n expect(() => locater.getSchemaKey(schemaXml)).to.throw(ECObjectsError, `Could not find the ECSchema 'schemaName' or 'version' tag in the given file`);\r\n });\r\n it(\"getSchemaKey, invalid schemaName, throws\", () => {\r\n const schemaXml = `<ECSchema version=\"1.1.1\" schemaName=\"\"> </ECSchema>`;\r\n expect(() => locater.getSchemaKey(schemaXml)).to.throw(ECObjectsError, `Could not find the ECSchema 'schemaName' or 'version' tag in the given file`);\r\n });\r\n it(\"getSchemaKey, invalid version attribute, throws\", () => {\r\n const schemaXml = `<ECSchema schemaName=\"SchemaA\" versionBad=\"1.1.1\"> </ECSchema>`;\r\n expect(() => locater.getSchemaKey(schemaXml)).to.throw(ECObjectsError, `Could not find the ECSchema 'schemaName' or 'version' tag in the given file`);\r\n });\r\n it(\"getSchemaKey, invalid version, throws\", () => {\r\n const schemaXml = `<ECSchema schemaName=\"SchemaA\" version=\"\"> </ECSchema>`;\r\n expect(() => locater.getSchemaKey(schemaXml)).to.throw(ECObjectsError, `Could not find the ECSchema 'schemaName' or 'version' tag in the given file`);\r\n });\r\n});\r\n"]}
|
|
@@ -7,7 +7,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
const chai_1 = require("chai");
|
|
8
8
|
const path = require("path");
|
|
9
9
|
const fs = require("fs");
|
|
10
|
-
const
|
|
10
|
+
const glob_1 = require("glob");
|
|
11
11
|
const ecschema_metadata_1 = require("@itwin/ecschema-metadata");
|
|
12
12
|
const SchemaXmlStringLocater_1 = require("../SchemaXmlStringLocater");
|
|
13
13
|
describe("SchemaXmlStringLocater tests:", () => {
|
|
@@ -22,8 +22,8 @@ describe("SchemaXmlStringLocater tests:", () => {
|
|
|
22
22
|
const loadSchemaStrings = () => {
|
|
23
23
|
const schemas = [];
|
|
24
24
|
const searchPath = path.join(__dirname, "assets", "Schema*.ecschema.xml");
|
|
25
|
-
const result =
|
|
26
|
-
for (const match of result
|
|
25
|
+
const result = (0, glob_1.globSync)(searchPath, { windowsPathsNoEscape: true });
|
|
26
|
+
for (const match of result) {
|
|
27
27
|
const file = fs.readFileSync(match);
|
|
28
28
|
if (!file)
|
|
29
29
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaXmlStringLocater.test.js","sourceRoot":"","sources":["../../../src/test/SchemaXmlStringLocater.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert, expect } from \"chai\";\r\nimport * as path from \"path\";\r\nimport * as fs from \"fs\";\r\nimport * as glob from \"glob\";\r\nimport { ECObjectsError, ECObjectsStatus, ECVersion, SchemaContext, SchemaKey, SchemaMatchType } from \"@itwin/ecschema-metadata\";\r\nimport { SchemaXmlStringLocater } from \"../SchemaXmlStringLocater\";\r\nimport { StringSchemaKey } from \"../SchemaStringLocater\";\r\n\r\ndescribe(\"SchemaXmlStringLocater tests:\", () => {\r\n let locater: SchemaXmlStringLocater;\r\n let context: SchemaContext;\r\n let schemaStrings: string [];\r\n\r\n const loadSchemaString = (schemaName: string) => {\r\n const searchPath = path.join(__dirname, \"assets\", `${schemaName}.ecschema.xml`);\r\n const file = fs.readFileSync(searchPath);\r\n return file.toString();\r\n };\r\n\r\n const loadSchemaStrings = () => {\r\n const schemas: string [] = [];\r\n const searchPath = path.join(__dirname, \"assets\", \"Schema*.ecschema.xml\");\r\n const result = new glob.GlobSync(searchPath, { sync: true });\r\n for (const match of result.found) {\r\n const file = fs.readFileSync(match);\r\n if (!file)\r\n continue;\r\n schemas.push(file.toString());\r\n }\r\n return schemas;\r\n };\r\n\r\n beforeEach(() => {\r\n schemaStrings = loadSchemaStrings();\r\n locater = new SchemaXmlStringLocater();\r\n context = new SchemaContext();\r\n context.addLocater(locater);\r\n });\r\n\r\n it(\"locate valid schema with multiple references\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n const schemaKey = new SchemaKey(\"SchemaA\", 1, 1, 1);\r\n const schema = await context.getSchema(schemaKey, SchemaMatchType.Exact);\r\n\r\n assert.isDefined(schema);\r\n assert.strictEqual(schema!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(schema!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"locate valid schema with multiple references synchronously\", () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n const schemaKey = new SchemaKey(\"SchemaA\", 1, 1, 1);\r\n const schema = context.getSchemaSync(schemaKey, SchemaMatchType.Exact);\r\n\r\n assert.isDefined(schema);\r\n assert.strictEqual(schema!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(schema!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema called multiple times for same schema\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n const schemaKey = new SchemaKey(\"SchemaD\", 4, 4, 4);\r\n\r\n const locater1 = await locater.getSchema(schemaKey, SchemaMatchType.Exact, new SchemaContext());\r\n const locater2 = await locater.getSchema(schemaKey, SchemaMatchType.Exact, new SchemaContext());\r\n const context1 = await context.getSchema(schemaKey, SchemaMatchType.Exact);\r\n const context2 = await context.getSchema(schemaKey, SchemaMatchType.Exact);\r\n\r\n // locater should not cache, but context should cache\r\n assert.notEqual(locater1, locater2);\r\n assert.notEqual(locater1, context1);\r\n assert.strictEqual(context1, context2);\r\n });\r\n\r\n it(\"getSchema which does not exist, returns undefined\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n const schemaKey = new SchemaKey(\"DoesNotExist\");\r\n\r\n assert.isUndefined(await locater.getSchema(schemaKey, SchemaMatchType.Exact, context));\r\n });\r\n\r\n it(\"addSchemaString, bad schema tag, throws\", async () => {\r\n const schemaString = loadSchemaString(\"BadSchemaTag\");\r\n try {\r\n locater.addSchemaString(schemaString);\r\n } catch (e) {\r\n const error = e as ECObjectsError;\r\n assert.strictEqual(error.errorNumber, ECObjectsStatus.InvalidSchemaXML);\r\n return;\r\n }\r\n\r\n assert.fail(0, 1, \"Expected ECObjects exception\");\r\n });\r\n\r\n it(\"addSchemaString, bad schema name tag, throws\", async () => {\r\n const schemaString = loadSchemaString(\"BadSchemaNameTag\");\r\n try {\r\n locater.addSchemaString(schemaString);\r\n } catch (e) {\r\n const error = e as ECObjectsError;\r\n assert.strictEqual(error.errorNumber, ECObjectsStatus.InvalidSchemaXML);\r\n return;\r\n }\r\n\r\n assert.fail(0, 1, \"Expected ECObjects exception\");\r\n });\r\n\r\n it(\"addSchemaString, bad schema version tag, throws\", async () => {\r\n const schemaString = loadSchemaString(\"BadSchemaVersionTag\");\r\n try {\r\n locater.addSchemaString(schemaString);\r\n } catch (e) {\r\n const error = e as ECObjectsError;\r\n assert.strictEqual(error.errorNumber, ECObjectsStatus.InvalidSchemaXML);\r\n return;\r\n }\r\n\r\n assert.fail(0, 1, \"Expected ECObjects exception\");\r\n });\r\n\r\n it(\"getSchema, full version, succeeds\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n const stub = await locater.getSchema(new SchemaKey(\"SchemaA\", 1, 1, 1), SchemaMatchType.Exact, context);\r\n assert.isDefined(stub);\r\n const key = stub!.schemaKey as StringSchemaKey;\r\n assert.strictEqual(key.name, \"SchemaA\");\r\n assert.strictEqual(key.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema, reference does not exist, throws.\", async () => {\r\n const schemaString = loadSchemaString(\"RefDoesNotExist\");\r\n locater.addSchemaString(schemaString);\r\n try {\r\n await locater.getSchema(new SchemaKey(\"RefDoesNotExist\", 1, 1, 1), SchemaMatchType.Exact, context);\r\n } catch (e) {\r\n const error = e as ECObjectsError;\r\n assert.strictEqual(error.errorNumber, ECObjectsStatus.UnableToLocateSchema);\r\n return;\r\n }\r\n\r\n assert.fail();\r\n });\r\n\r\n it(\"getSchema, references set\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n\r\n const schemaA = await context.getSchema(new SchemaKey(\"SchemaA\", 1, 1, 1), SchemaMatchType.Exact);\r\n const schemaB = await context.getSchema(new SchemaKey(\"SchemaB\", 2, 2, 2), SchemaMatchType.Exact);\r\n const schemaC = await context.getSchema(new SchemaKey(\"SchemaC\", 3, 3, 3), SchemaMatchType.Exact);\r\n const schemaD = await context.getSchema(new SchemaKey(\"SchemaD\", 4, 4, 4), SchemaMatchType.Exact);\r\n\r\n assert.isDefined(schemaA);\r\n assert.strictEqual(schemaA!.references.length, 2);\r\n assert.deepEqual(schemaA!.references[0], schemaC);\r\n assert.deepEqual(schemaA!.references[1], schemaB);\r\n assert.deepEqual(schemaA!.references[0].references[0], schemaD);\r\n assert.deepEqual(schemaA!.references[1].references[0], schemaC);\r\n assert.deepEqual(schemaA!.references[1].references[1], schemaD);\r\n });\r\n\r\n it(\"getSchema, exact version, wrong minor, fails\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n assert.isUndefined(await context.getSchema(new SchemaKey(\"SchemaA\", 1, 1, 2), SchemaMatchType.Exact));\r\n });\r\n\r\n it(\"getSchema, latest, succeeds\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n const stub = await locater.getSchema(new SchemaKey(\"SchemaA\", 1, 1, 0), SchemaMatchType.Latest, context);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"02.00.02\");\r\n });\r\n\r\n it(\"getSchema, latest write compatible, succeeds\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n const stub = await context.getSchema(new SchemaKey(\"SchemaA\", 1, 1, 0), SchemaMatchType.LatestWriteCompatible);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema, latest write compatible, write version wrong, fails\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n assert.isUndefined(await context.getSchema(new SchemaKey(\"SchemaA\", 1, 2, 0), SchemaMatchType.LatestWriteCompatible));\r\n });\r\n\r\n it(\"getSchema, latest read compatible, succeeds\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n const stub = await context.getSchema(new SchemaKey(\"SchemaA\", 1, 0, 0), SchemaMatchType.LatestReadCompatible);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema, latest read compatible, read version wrong, fails\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n assert.isUndefined(await context.getSchema(new SchemaKey(\"SchemaA\", 2, 1, 1), SchemaMatchType.LatestReadCompatible));\r\n });\r\n\r\n it(\"sync - should ignore commented out schema references\", () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n const schemaString = loadSchemaString(\"RefCommentedOut\");\r\n locater.addSchemaString(schemaString);\r\n\r\n const stub = context.getSchemaSync(new SchemaKey(\"RefCommentedOut\", 1, 1, 1), SchemaMatchType.LatestReadCompatible);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"RefCommentedOut\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"async - should ignore commented out schema references\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n const schemaString = loadSchemaString(\"RefCommentedOut\");\r\n locater.addSchemaString(schemaString);\r\n\r\n const stub = await context.getSchema(new SchemaKey(\"RefCommentedOut\", 1, 1, 1), SchemaMatchType.LatestReadCompatible);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"RefCommentedOut\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchemaKey, valid version and name, succeeds\", () => {\r\n const schemaXml = `<ECSchema schemaName=\"SchemaA\" version=\"1.1.1\"> </ECSchema>`;\r\n const key = locater.getSchemaKey(schemaXml);\r\n assert.deepEqual(key, new SchemaKey(\"SchemaA\", new ECVersion(1, 1, 1)));\r\n });\r\n\r\n it(\"getSchemaKey, invalid xml, throws\", () => {\r\n const schemaXml = `<ECSchemaBad schemaName=\"SchemaA\" version=\"1.1.1\"> </ECSchemaBad>`;\r\n expect(() => locater.getSchemaKey(schemaXml)).to.throw(ECObjectsError, `Could not find '<ECSchema>' tag in the given string`);\r\n });\r\n\r\n it(\"getSchemaKey, invalid schemaName attribute, throws\", () => {\r\n const schemaXml = `<ECSchema schemaNameBad=\"SchemaA\" version=\"1.1.1\"> </ECSchema>`;\r\n expect(() => locater.getSchemaKey(schemaXml)).to.throw(ECObjectsError, `Could not find the ECSchema 'schemaName' or 'version' tag in the given string`);\r\n });\r\n\r\n it(\"getSchemaKey, invalid schemaName, throws\", () => {\r\n const schemaXml = `<ECSchema version=\"1.1.1\" schemaName=\"\"> </ECSchema>`;\r\n expect(() => locater.getSchemaKey(schemaXml)).to.throw(ECObjectsError, `Could not find the ECSchema 'schemaName' or 'version' tag in the given string`);\r\n });\r\n\r\n it(\"getSchemaKey, invalid version attribute, throws\", () => {\r\n const schemaXml = `<ECSchema schemaName=\"SchemaA\" versionBad=\"1.1.1\"> </ECSchema>`;\r\n expect(() => locater.getSchemaKey(schemaXml)).to.throw(ECObjectsError, `Could not find the ECSchema 'schemaName' or 'version' tag in the given string`);\r\n });\r\n\r\n it(\"getSchemaKey, invalid version, throws\", () => {\r\n const schemaXml = `<ECSchema schemaName=\"SchemaA\" version=\"\"> </ECSchema>`;\r\n expect(() => locater.getSchemaKey(schemaXml)).to.throw(ECObjectsError, `Could not find the ECSchema 'schemaName' or 'version' tag in the given string`);\r\n });\r\n});\r\n\r\n"]}
|
|
1
|
+
{"version":3,"file":"SchemaXmlStringLocater.test.js","sourceRoot":"","sources":["../../../src/test/SchemaXmlStringLocater.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { assert, expect } from \"chai\";\r\nimport * as path from \"path\";\r\nimport * as fs from \"fs\";\r\nimport { globSync } from \"glob\";\r\nimport { ECObjectsError, ECObjectsStatus, ECVersion, SchemaContext, SchemaKey, SchemaMatchType } from \"@itwin/ecschema-metadata\";\r\nimport { SchemaXmlStringLocater } from \"../SchemaXmlStringLocater\";\r\nimport { StringSchemaKey } from \"../SchemaStringLocater\";\r\n\r\ndescribe(\"SchemaXmlStringLocater tests:\", () => {\r\n let locater: SchemaXmlStringLocater;\r\n let context: SchemaContext;\r\n let schemaStrings: string [];\r\n\r\n const loadSchemaString = (schemaName: string) => {\r\n const searchPath = path.join(__dirname, \"assets\", `${schemaName}.ecschema.xml`);\r\n const file = fs.readFileSync(searchPath);\r\n return file.toString();\r\n };\r\n\r\n const loadSchemaStrings = () => {\r\n const schemas: string [] = [];\r\n const searchPath = path.join(__dirname, \"assets\", \"Schema*.ecschema.xml\");\r\n const result = globSync(searchPath, { windowsPathsNoEscape: true });\r\n for (const match of result) {\r\n const file = fs.readFileSync(match);\r\n if (!file)\r\n continue;\r\n schemas.push(file.toString());\r\n }\r\n return schemas;\r\n };\r\n\r\n beforeEach(() => {\r\n schemaStrings = loadSchemaStrings();\r\n locater = new SchemaXmlStringLocater();\r\n context = new SchemaContext();\r\n context.addLocater(locater);\r\n });\r\n\r\n it(\"locate valid schema with multiple references\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n const schemaKey = new SchemaKey(\"SchemaA\", 1, 1, 1);\r\n const schema = await context.getSchema(schemaKey, SchemaMatchType.Exact);\r\n\r\n assert.isDefined(schema);\r\n assert.strictEqual(schema!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(schema!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"locate valid schema with multiple references synchronously\", () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n const schemaKey = new SchemaKey(\"SchemaA\", 1, 1, 1);\r\n const schema = context.getSchemaSync(schemaKey, SchemaMatchType.Exact);\r\n\r\n assert.isDefined(schema);\r\n assert.strictEqual(schema!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(schema!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema called multiple times for same schema\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n const schemaKey = new SchemaKey(\"SchemaD\", 4, 4, 4);\r\n\r\n const locater1 = await locater.getSchema(schemaKey, SchemaMatchType.Exact, new SchemaContext());\r\n const locater2 = await locater.getSchema(schemaKey, SchemaMatchType.Exact, new SchemaContext());\r\n const context1 = await context.getSchema(schemaKey, SchemaMatchType.Exact);\r\n const context2 = await context.getSchema(schemaKey, SchemaMatchType.Exact);\r\n\r\n // locater should not cache, but context should cache\r\n assert.notEqual(locater1, locater2);\r\n assert.notEqual(locater1, context1);\r\n assert.strictEqual(context1, context2);\r\n });\r\n\r\n it(\"getSchema which does not exist, returns undefined\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n const schemaKey = new SchemaKey(\"DoesNotExist\");\r\n\r\n assert.isUndefined(await locater.getSchema(schemaKey, SchemaMatchType.Exact, context));\r\n });\r\n\r\n it(\"addSchemaString, bad schema tag, throws\", async () => {\r\n const schemaString = loadSchemaString(\"BadSchemaTag\");\r\n try {\r\n locater.addSchemaString(schemaString);\r\n } catch (e) {\r\n const error = e as ECObjectsError;\r\n assert.strictEqual(error.errorNumber, ECObjectsStatus.InvalidSchemaXML);\r\n return;\r\n }\r\n\r\n assert.fail(0, 1, \"Expected ECObjects exception\");\r\n });\r\n\r\n it(\"addSchemaString, bad schema name tag, throws\", async () => {\r\n const schemaString = loadSchemaString(\"BadSchemaNameTag\");\r\n try {\r\n locater.addSchemaString(schemaString);\r\n } catch (e) {\r\n const error = e as ECObjectsError;\r\n assert.strictEqual(error.errorNumber, ECObjectsStatus.InvalidSchemaXML);\r\n return;\r\n }\r\n\r\n assert.fail(0, 1, \"Expected ECObjects exception\");\r\n });\r\n\r\n it(\"addSchemaString, bad schema version tag, throws\", async () => {\r\n const schemaString = loadSchemaString(\"BadSchemaVersionTag\");\r\n try {\r\n locater.addSchemaString(schemaString);\r\n } catch (e) {\r\n const error = e as ECObjectsError;\r\n assert.strictEqual(error.errorNumber, ECObjectsStatus.InvalidSchemaXML);\r\n return;\r\n }\r\n\r\n assert.fail(0, 1, \"Expected ECObjects exception\");\r\n });\r\n\r\n it(\"getSchema, full version, succeeds\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n const stub = await locater.getSchema(new SchemaKey(\"SchemaA\", 1, 1, 1), SchemaMatchType.Exact, context);\r\n assert.isDefined(stub);\r\n const key = stub!.schemaKey as StringSchemaKey;\r\n assert.strictEqual(key.name, \"SchemaA\");\r\n assert.strictEqual(key.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema, reference does not exist, throws.\", async () => {\r\n const schemaString = loadSchemaString(\"RefDoesNotExist\");\r\n locater.addSchemaString(schemaString);\r\n try {\r\n await locater.getSchema(new SchemaKey(\"RefDoesNotExist\", 1, 1, 1), SchemaMatchType.Exact, context);\r\n } catch (e) {\r\n const error = e as ECObjectsError;\r\n assert.strictEqual(error.errorNumber, ECObjectsStatus.UnableToLocateSchema);\r\n return;\r\n }\r\n\r\n assert.fail();\r\n });\r\n\r\n it(\"getSchema, references set\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n\r\n const schemaA = await context.getSchema(new SchemaKey(\"SchemaA\", 1, 1, 1), SchemaMatchType.Exact);\r\n const schemaB = await context.getSchema(new SchemaKey(\"SchemaB\", 2, 2, 2), SchemaMatchType.Exact);\r\n const schemaC = await context.getSchema(new SchemaKey(\"SchemaC\", 3, 3, 3), SchemaMatchType.Exact);\r\n const schemaD = await context.getSchema(new SchemaKey(\"SchemaD\", 4, 4, 4), SchemaMatchType.Exact);\r\n\r\n assert.isDefined(schemaA);\r\n assert.strictEqual(schemaA!.references.length, 2);\r\n assert.deepEqual(schemaA!.references[0], schemaC);\r\n assert.deepEqual(schemaA!.references[1], schemaB);\r\n assert.deepEqual(schemaA!.references[0].references[0], schemaD);\r\n assert.deepEqual(schemaA!.references[1].references[0], schemaC);\r\n assert.deepEqual(schemaA!.references[1].references[1], schemaD);\r\n });\r\n\r\n it(\"getSchema, exact version, wrong minor, fails\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n assert.isUndefined(await context.getSchema(new SchemaKey(\"SchemaA\", 1, 1, 2), SchemaMatchType.Exact));\r\n });\r\n\r\n it(\"getSchema, latest, succeeds\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n const stub = await locater.getSchema(new SchemaKey(\"SchemaA\", 1, 1, 0), SchemaMatchType.Latest, context);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"02.00.02\");\r\n });\r\n\r\n it(\"getSchema, latest write compatible, succeeds\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n const stub = await context.getSchema(new SchemaKey(\"SchemaA\", 1, 1, 0), SchemaMatchType.LatestWriteCompatible);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema, latest write compatible, write version wrong, fails\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n assert.isUndefined(await context.getSchema(new SchemaKey(\"SchemaA\", 1, 2, 0), SchemaMatchType.LatestWriteCompatible));\r\n });\r\n\r\n it(\"getSchema, latest read compatible, succeeds\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n const stub = await context.getSchema(new SchemaKey(\"SchemaA\", 1, 0, 0), SchemaMatchType.LatestReadCompatible);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"SchemaA\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchema, latest read compatible, read version wrong, fails\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n assert.isUndefined(await context.getSchema(new SchemaKey(\"SchemaA\", 2, 1, 1), SchemaMatchType.LatestReadCompatible));\r\n });\r\n\r\n it(\"sync - should ignore commented out schema references\", () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n const schemaString = loadSchemaString(\"RefCommentedOut\");\r\n locater.addSchemaString(schemaString);\r\n\r\n const stub = context.getSchemaSync(new SchemaKey(\"RefCommentedOut\", 1, 1, 1), SchemaMatchType.LatestReadCompatible);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"RefCommentedOut\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"async - should ignore commented out schema references\", async () => {\r\n locater.addSchemaStrings(schemaStrings);\r\n const schemaString = loadSchemaString(\"RefCommentedOut\");\r\n locater.addSchemaString(schemaString);\r\n\r\n const stub = await context.getSchema(new SchemaKey(\"RefCommentedOut\", 1, 1, 1), SchemaMatchType.LatestReadCompatible);\r\n\r\n assert.isDefined(stub);\r\n assert.strictEqual(stub!.schemaKey.name, \"RefCommentedOut\");\r\n assert.strictEqual(stub!.schemaKey.version.toString(), \"01.01.01\");\r\n });\r\n\r\n it(\"getSchemaKey, valid version and name, succeeds\", () => {\r\n const schemaXml = `<ECSchema schemaName=\"SchemaA\" version=\"1.1.1\"> </ECSchema>`;\r\n const key = locater.getSchemaKey(schemaXml);\r\n assert.deepEqual(key, new SchemaKey(\"SchemaA\", new ECVersion(1, 1, 1)));\r\n });\r\n\r\n it(\"getSchemaKey, invalid xml, throws\", () => {\r\n const schemaXml = `<ECSchemaBad schemaName=\"SchemaA\" version=\"1.1.1\"> </ECSchemaBad>`;\r\n expect(() => locater.getSchemaKey(schemaXml)).to.throw(ECObjectsError, `Could not find '<ECSchema>' tag in the given string`);\r\n });\r\n\r\n it(\"getSchemaKey, invalid schemaName attribute, throws\", () => {\r\n const schemaXml = `<ECSchema schemaNameBad=\"SchemaA\" version=\"1.1.1\"> </ECSchema>`;\r\n expect(() => locater.getSchemaKey(schemaXml)).to.throw(ECObjectsError, `Could not find the ECSchema 'schemaName' or 'version' tag in the given string`);\r\n });\r\n\r\n it(\"getSchemaKey, invalid schemaName, throws\", () => {\r\n const schemaXml = `<ECSchema version=\"1.1.1\" schemaName=\"\"> </ECSchema>`;\r\n expect(() => locater.getSchemaKey(schemaXml)).to.throw(ECObjectsError, `Could not find the ECSchema 'schemaName' or 'version' tag in the given string`);\r\n });\r\n\r\n it(\"getSchemaKey, invalid version attribute, throws\", () => {\r\n const schemaXml = `<ECSchema schemaName=\"SchemaA\" versionBad=\"1.1.1\"> </ECSchema>`;\r\n expect(() => locater.getSchemaKey(schemaXml)).to.throw(ECObjectsError, `Could not find the ECSchema 'schemaName' or 'version' tag in the given string`);\r\n });\r\n\r\n it(\"getSchemaKey, invalid version, throws\", () => {\r\n const schemaXml = `<ECSchema schemaName=\"SchemaA\" version=\"\"> </ECSchema>`;\r\n expect(() => locater.getSchemaKey(schemaXml)).to.throw(ECObjectsError, `Could not find the ECSchema 'schemaName' or 'version' tag in the given string`);\r\n });\r\n});\r\n\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@itwin/ecschema-locaters",
|
|
3
|
-
"version": "4.6.
|
|
3
|
+
"version": "4.6.1",
|
|
4
4
|
"description": "EC Schema file locaters",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "lib/cjs/ecschema-locaters.js",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"@bentley/bis-core-schema": "^1.0.15",
|
|
27
27
|
"@bentley/bis-custom-attributes-schema": "^1.0.0",
|
|
28
28
|
"@bentley/construction-schema": "^1.0.4",
|
|
29
|
-
"@bentley/core-custom-attributes-schema": "^1.0.
|
|
29
|
+
"@bentley/core-custom-attributes-schema": "^1.0.4",
|
|
30
30
|
"@bentley/ecdb-map-schema": "^2.0.1",
|
|
31
31
|
"@bentley/ecdb-schema-policies-schema": "^1.0.1",
|
|
32
32
|
"@bentley/formats-schema": "^1.0.0",
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"@bentley/spatial-composition-schema": "^1.0.1",
|
|
38
38
|
"@bentley/structural-physical-schema": "^1.0.1",
|
|
39
39
|
"@bentley/units-schema": "^1.0.8",
|
|
40
|
-
"@itwin/eslint-plugin": "4.0.
|
|
40
|
+
"@itwin/eslint-plugin": "^4.0.2",
|
|
41
41
|
"@types/chai": "4.3.1",
|
|
42
42
|
"@types/chai-as-promised": "^7",
|
|
43
43
|
"@types/fs-extra": "^4.0.7",
|
|
@@ -53,17 +53,17 @@
|
|
|
53
53
|
"nyc": "^15.1.0",
|
|
54
54
|
"rimraf": "^3.0.2",
|
|
55
55
|
"sinon": "^17.0.1",
|
|
56
|
-
"typescript": "~5.
|
|
57
|
-
"@itwin/build-tools": "4.6.
|
|
58
|
-
"@itwin/ecschema-metadata": "4.6.
|
|
56
|
+
"typescript": "~5.3.3",
|
|
57
|
+
"@itwin/build-tools": "4.6.1",
|
|
58
|
+
"@itwin/ecschema-metadata": "4.6.1"
|
|
59
59
|
},
|
|
60
60
|
"dependencies": {
|
|
61
|
-
"glob": "^
|
|
61
|
+
"glob": "^10.3.12",
|
|
62
62
|
"fs-extra": "^8.1.0",
|
|
63
63
|
"@xmldom/xmldom": "~0.8.5"
|
|
64
64
|
},
|
|
65
65
|
"peerDependencies": {
|
|
66
|
-
"@itwin/ecschema-metadata": "^4.6.
|
|
66
|
+
"@itwin/ecschema-metadata": "^4.6.1"
|
|
67
67
|
},
|
|
68
68
|
"nyc": {
|
|
69
69
|
"extends": "./node_modules/@itwin/build-tools/.nycrc",
|