@intlayer/chokidar 7.0.0-canary.2 → 7.0.0-canary.3

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.
@@ -1,5 +1,7 @@
1
1
  const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
2
  const require_utils_parallelize = require('../utils/parallelize.cjs');
3
+ let __intlayer_config = require("@intlayer/config");
4
+ __intlayer_config = require_rolldown_runtime.__toESM(__intlayer_config);
3
5
  let node_path = require("node:path");
4
6
  node_path = require_rolldown_runtime.__toESM(node_path);
5
7
  let node_fs_promises = require("node:fs/promises");
@@ -17,8 +19,9 @@ const createTypes = async (dictionariesPaths, configuration) => {
17
19
  const { typesDir } = content;
18
20
  await (0, node_fs_promises.mkdir)(typesDir, { recursive: true });
19
21
  return (await require_utils_parallelize.parallelize(dictionariesPaths, async (dictionaryPath) => {
20
- delete build.require.cache[build.require.resolve(dictionaryPath)];
21
- const dictionary = build.require(dictionaryPath);
22
+ const requireFunction = build.require ?? __intlayer_config.ESMxCJSRequire;
23
+ (0, __intlayer_config.clearModuleCache)(dictionaryPath);
24
+ const dictionary = requireFunction(dictionaryPath);
22
25
  if (!dictionary.key) return;
23
26
  const typeDefinition = generateTypeScriptType(dictionary);
24
27
  const outputPath = (0, node_path.resolve)(typesDir, `${dictionary.key}.ts`);
@@ -1 +1 @@
1
- {"version":3,"file":"createType.cjs","names":["parallelize","dictionary: Dictionary","typeDefinition: string","outputPath: string"],"sources":["../../../src/createType/createType.ts"],"sourcesContent":["import { mkdir, writeFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport type { Dictionary, IntlayerConfig } from '@intlayer/types';\nimport { parallelize } from '../utils/parallelize';\n\nexport const generateTypeScriptType = (dictionary: Dictionary) => {\n const jsonString = JSON.stringify(dictionary, null, 2);\n\n return `/* eslint-disable */\\nexport default ${jsonString} as const;\\n`;\n};\n/**\n * This function generates a TypeScript type definition from a JSON object\n */\nexport const createTypes = async (\n dictionariesPaths: string[],\n configuration: IntlayerConfig\n): Promise<string[]> => {\n const { build, content } = configuration;\n const { typesDir } = content;\n\n // Create type folders if they don't exist\n await mkdir(typesDir, { recursive: true });\n\n const results = await parallelize(\n dictionariesPaths,\n async (dictionaryPath): Promise<string | undefined> => {\n delete build.require.cache[build.require.resolve(dictionaryPath)];\n const dictionary: Dictionary = build.require(dictionaryPath);\n\n if (!dictionary.key) {\n return undefined;\n }\n\n const typeDefinition: string = generateTypeScriptType(dictionary);\n\n const outputPath: string = resolve(typesDir, `${dictionary.key}.ts`);\n\n await writeFile(outputPath, typeDefinition);\n\n return outputPath;\n }\n );\n\n return results.filter(Boolean) as string[];\n};\n"],"mappings":";;;;;;;;AAKA,MAAa,0BAA0B,eAA2B;AAGhE,QAAO,wCAFY,KAAK,UAAU,YAAY,MAAM,EAAE,CAEI;;;;;AAK5D,MAAa,cAAc,OACzB,mBACA,kBACsB;CACtB,MAAM,EAAE,OAAO,YAAY;CAC3B,MAAM,EAAE,aAAa;AAGrB,mCAAY,UAAU,EAAE,WAAW,MAAM,CAAC;AAsB1C,SApBgB,MAAMA,sCACpB,mBACA,OAAO,mBAAgD;AACrD,SAAO,MAAM,QAAQ,MAAM,MAAM,QAAQ,QAAQ,eAAe;EAChE,MAAMC,aAAyB,MAAM,QAAQ,eAAe;AAE5D,MAAI,CAAC,WAAW,IACd;EAGF,MAAMC,iBAAyB,uBAAuB,WAAW;EAEjE,MAAMC,oCAA6B,UAAU,GAAG,WAAW,IAAI,KAAK;AAEpE,wCAAgB,YAAY,eAAe;AAE3C,SAAO;GAEV,EAEc,OAAO,QAAQ"}
1
+ {"version":3,"file":"createType.cjs","names":["parallelize","ESMxCJSRequire","dictionary: Dictionary","typeDefinition: string","outputPath: string"],"sources":["../../../src/createType/createType.ts"],"sourcesContent":["import { mkdir, writeFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { clearModuleCache, ESMxCJSRequire } from '@intlayer/config';\nimport type { Dictionary, IntlayerConfig } from '@intlayer/types';\nimport { parallelize } from '../utils/parallelize';\n\nexport const generateTypeScriptType = (dictionary: Dictionary) => {\n const jsonString = JSON.stringify(dictionary, null, 2);\n\n return `/* eslint-disable */\\nexport default ${jsonString} as const;\\n`;\n};\n/**\n * This function generates a TypeScript type definition from a JSON object\n */\nexport const createTypes = async (\n dictionariesPaths: string[],\n configuration: IntlayerConfig\n): Promise<string[]> => {\n const { build, content } = configuration;\n const { typesDir } = content;\n\n // Create type folders if they don't exist\n await mkdir(typesDir, { recursive: true });\n\n const results = await parallelize(\n dictionariesPaths,\n async (dictionaryPath): Promise<string | undefined> => {\n const requireFunction = build.require ?? ESMxCJSRequire;\n clearModuleCache(dictionaryPath);\n\n const dictionary: Dictionary = requireFunction(dictionaryPath);\n\n if (!dictionary.key) {\n return undefined;\n }\n\n const typeDefinition: string = generateTypeScriptType(dictionary);\n\n const outputPath: string = resolve(typesDir, `${dictionary.key}.ts`);\n\n await writeFile(outputPath, typeDefinition);\n\n return outputPath;\n }\n );\n\n return results.filter(Boolean) as string[];\n};\n"],"mappings":";;;;;;;;;;AAMA,MAAa,0BAA0B,eAA2B;AAGhE,QAAO,wCAFY,KAAK,UAAU,YAAY,MAAM,EAAE,CAEI;;;;;AAK5D,MAAa,cAAc,OACzB,mBACA,kBACsB;CACtB,MAAM,EAAE,OAAO,YAAY;CAC3B,MAAM,EAAE,aAAa;AAGrB,mCAAY,UAAU,EAAE,WAAW,MAAM,CAAC;AAwB1C,SAtBgB,MAAMA,sCACpB,mBACA,OAAO,mBAAgD;EACrD,MAAM,kBAAkB,MAAM,WAAWC;AACzC,0CAAiB,eAAe;EAEhC,MAAMC,aAAyB,gBAAgB,eAAe;AAE9D,MAAI,CAAC,WAAW,IACd;EAGF,MAAMC,iBAAyB,uBAAuB,WAAW;EAEjE,MAAMC,oCAA6B,UAAU,GAAG,WAAW,IAAI,KAAK;AAEpE,wCAAgB,YAAY,eAAe;AAE3C,SAAO;GAEV,EAEc,OAAO,QAAQ"}
@@ -1,4 +1,5 @@
1
1
  import { parallelize } from "../utils/parallelize.mjs";
2
+ import { ESMxCJSRequire, clearModuleCache } from "@intlayer/config";
2
3
  import { resolve } from "node:path";
3
4
  import { mkdir, writeFile } from "node:fs/promises";
4
5
 
@@ -14,8 +15,9 @@ const createTypes = async (dictionariesPaths, configuration) => {
14
15
  const { typesDir } = content;
15
16
  await mkdir(typesDir, { recursive: true });
16
17
  return (await parallelize(dictionariesPaths, async (dictionaryPath) => {
17
- delete build.require.cache[build.require.resolve(dictionaryPath)];
18
- const dictionary = build.require(dictionaryPath);
18
+ const requireFunction = build.require ?? ESMxCJSRequire;
19
+ clearModuleCache(dictionaryPath);
20
+ const dictionary = requireFunction(dictionaryPath);
19
21
  if (!dictionary.key) return;
20
22
  const typeDefinition = generateTypeScriptType(dictionary);
21
23
  const outputPath = resolve(typesDir, `${dictionary.key}.ts`);
@@ -1 +1 @@
1
- {"version":3,"file":"createType.mjs","names":["dictionary: Dictionary","typeDefinition: string","outputPath: string"],"sources":["../../../src/createType/createType.ts"],"sourcesContent":["import { mkdir, writeFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport type { Dictionary, IntlayerConfig } from '@intlayer/types';\nimport { parallelize } from '../utils/parallelize';\n\nexport const generateTypeScriptType = (dictionary: Dictionary) => {\n const jsonString = JSON.stringify(dictionary, null, 2);\n\n return `/* eslint-disable */\\nexport default ${jsonString} as const;\\n`;\n};\n/**\n * This function generates a TypeScript type definition from a JSON object\n */\nexport const createTypes = async (\n dictionariesPaths: string[],\n configuration: IntlayerConfig\n): Promise<string[]> => {\n const { build, content } = configuration;\n const { typesDir } = content;\n\n // Create type folders if they don't exist\n await mkdir(typesDir, { recursive: true });\n\n const results = await parallelize(\n dictionariesPaths,\n async (dictionaryPath): Promise<string | undefined> => {\n delete build.require.cache[build.require.resolve(dictionaryPath)];\n const dictionary: Dictionary = build.require(dictionaryPath);\n\n if (!dictionary.key) {\n return undefined;\n }\n\n const typeDefinition: string = generateTypeScriptType(dictionary);\n\n const outputPath: string = resolve(typesDir, `${dictionary.key}.ts`);\n\n await writeFile(outputPath, typeDefinition);\n\n return outputPath;\n }\n );\n\n return results.filter(Boolean) as string[];\n};\n"],"mappings":";;;;;AAKA,MAAa,0BAA0B,eAA2B;AAGhE,QAAO,wCAFY,KAAK,UAAU,YAAY,MAAM,EAAE,CAEI;;;;;AAK5D,MAAa,cAAc,OACzB,mBACA,kBACsB;CACtB,MAAM,EAAE,OAAO,YAAY;CAC3B,MAAM,EAAE,aAAa;AAGrB,OAAM,MAAM,UAAU,EAAE,WAAW,MAAM,CAAC;AAsB1C,SApBgB,MAAM,YACpB,mBACA,OAAO,mBAAgD;AACrD,SAAO,MAAM,QAAQ,MAAM,MAAM,QAAQ,QAAQ,eAAe;EAChE,MAAMA,aAAyB,MAAM,QAAQ,eAAe;AAE5D,MAAI,CAAC,WAAW,IACd;EAGF,MAAMC,iBAAyB,uBAAuB,WAAW;EAEjE,MAAMC,aAAqB,QAAQ,UAAU,GAAG,WAAW,IAAI,KAAK;AAEpE,QAAM,UAAU,YAAY,eAAe;AAE3C,SAAO;GAEV,EAEc,OAAO,QAAQ"}
1
+ {"version":3,"file":"createType.mjs","names":["dictionary: Dictionary","typeDefinition: string","outputPath: string"],"sources":["../../../src/createType/createType.ts"],"sourcesContent":["import { mkdir, writeFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { clearModuleCache, ESMxCJSRequire } from '@intlayer/config';\nimport type { Dictionary, IntlayerConfig } from '@intlayer/types';\nimport { parallelize } from '../utils/parallelize';\n\nexport const generateTypeScriptType = (dictionary: Dictionary) => {\n const jsonString = JSON.stringify(dictionary, null, 2);\n\n return `/* eslint-disable */\\nexport default ${jsonString} as const;\\n`;\n};\n/**\n * This function generates a TypeScript type definition from a JSON object\n */\nexport const createTypes = async (\n dictionariesPaths: string[],\n configuration: IntlayerConfig\n): Promise<string[]> => {\n const { build, content } = configuration;\n const { typesDir } = content;\n\n // Create type folders if they don't exist\n await mkdir(typesDir, { recursive: true });\n\n const results = await parallelize(\n dictionariesPaths,\n async (dictionaryPath): Promise<string | undefined> => {\n const requireFunction = build.require ?? ESMxCJSRequire;\n clearModuleCache(dictionaryPath);\n\n const dictionary: Dictionary = requireFunction(dictionaryPath);\n\n if (!dictionary.key) {\n return undefined;\n }\n\n const typeDefinition: string = generateTypeScriptType(dictionary);\n\n const outputPath: string = resolve(typesDir, `${dictionary.key}.ts`);\n\n await writeFile(outputPath, typeDefinition);\n\n return outputPath;\n }\n );\n\n return results.filter(Boolean) as string[];\n};\n"],"mappings":";;;;;;AAMA,MAAa,0BAA0B,eAA2B;AAGhE,QAAO,wCAFY,KAAK,UAAU,YAAY,MAAM,EAAE,CAEI;;;;;AAK5D,MAAa,cAAc,OACzB,mBACA,kBACsB;CACtB,MAAM,EAAE,OAAO,YAAY;CAC3B,MAAM,EAAE,aAAa;AAGrB,OAAM,MAAM,UAAU,EAAE,WAAW,MAAM,CAAC;AAwB1C,SAtBgB,MAAM,YACpB,mBACA,OAAO,mBAAgD;EACrD,MAAM,kBAAkB,MAAM,WAAW;AACzC,mBAAiB,eAAe;EAEhC,MAAMA,aAAyB,gBAAgB,eAAe;AAE9D,MAAI,CAAC,WAAW,IACd;EAGF,MAAMC,iBAAyB,uBAAuB,WAAW;EAEjE,MAAMC,aAAqB,QAAQ,UAAU,GAAG,WAAW,IAAI,KAAK;AAEpE,QAAM,UAAU,YAAY,eAAe;AAE3C,SAAO;GAEV,EAEc,OAAO,QAAQ"}
@@ -1,14 +1,14 @@
1
1
  import { UnmergedDictionaryOutput } from "./writeUnmergedDictionary.js";
2
2
  import { MergedDictionaryOutput } from "./writeMergedDictionary.js";
3
3
  import { LocalizedDictionaryOutput } from "./writeDynamicDictionary.js";
4
- import * as _intlayer_types5 from "@intlayer/types";
4
+ import * as _intlayer_types0 from "@intlayer/types";
5
5
  import { Dictionary } from "@intlayer/types";
6
6
 
7
7
  //#region src/buildIntlayerDictionary/buildIntlayerDictionary.d.ts
8
8
  /**
9
9
  * This function transpile the bundled code to to make dictionaries as JSON files
10
10
  */
11
- declare const buildDictionary: (localDictionariesEntries: Dictionary[], configuration?: _intlayer_types5.IntlayerConfig, formats?: ("cjs" | "esm")[], importOtherDictionaries?: boolean) => Promise<{
11
+ declare const buildDictionary: (localDictionariesEntries: Dictionary[], configuration?: _intlayer_types0.IntlayerConfig, formats?: ("cjs" | "esm")[], importOtherDictionaries?: boolean) => Promise<{
12
12
  unmergedDictionaries: UnmergedDictionaryOutput;
13
13
  mergedDictionaries: MergedDictionaryOutput;
14
14
  dynamicDictionaries: LocalizedDictionaryOutput;
@@ -1,5 +1,5 @@
1
1
  import { MergedDictionaryOutput } from "./writeMergedDictionary.js";
2
- import * as _intlayer_types0 from "@intlayer/types";
2
+ import * as _intlayer_types7 from "@intlayer/types";
3
3
  import { Dictionary, Locale } from "@intlayer/types";
4
4
 
5
5
  //#region src/buildIntlayerDictionary/writeDynamicDictionary.d.ts
@@ -12,7 +12,7 @@ type LocalizedDictionaryOutput = Record<string, LocalizedDictionaryResult>;
12
12
  /**
13
13
  * This function generates the content of the dictionary list file
14
14
  */
15
- declare const generateDictionaryEntryPoint: (localizedDictionariesPathsRecord: LocalizedDictionaryResult, format?: "cjs" | "esm", configuration?: _intlayer_types0.IntlayerConfig) => string;
15
+ declare const generateDictionaryEntryPoint: (localizedDictionariesPathsRecord: LocalizedDictionaryResult, format?: "cjs" | "esm", configuration?: _intlayer_types7.IntlayerConfig) => string;
16
16
  /**
17
17
  * Write the localized dictionaries to the dictionariesDir
18
18
  * @param mergedDictionaries - The merged dictionaries
@@ -29,7 +29,7 @@ declare const generateDictionaryEntryPoint: (localizedDictionariesPathsRecord: L
29
29
  * // { key: 'home', content: { ... } },
30
30
  * ```
31
31
  */
32
- declare const writeDynamicDictionary: (mergedDictionaries: MergedDictionaryOutput, configuration?: _intlayer_types0.IntlayerConfig, formats?: ("cjs" | "esm")[]) => Promise<LocalizedDictionaryOutput>;
32
+ declare const writeDynamicDictionary: (mergedDictionaries: MergedDictionaryOutput, configuration?: _intlayer_types7.IntlayerConfig, formats?: ("cjs" | "esm")[]) => Promise<LocalizedDictionaryOutput>;
33
33
  //#endregion
34
34
  export { DictionaryResult, LocalizedDictionaryOutput, LocalizedDictionaryResult, generateDictionaryEntryPoint, writeDynamicDictionary };
35
35
  //# sourceMappingURL=writeDynamicDictionary.d.ts.map
@@ -1,4 +1,4 @@
1
- import * as _intlayer_types1 from "@intlayer/types";
1
+ import * as _intlayer_types5 from "@intlayer/types";
2
2
  import { Dictionary } from "@intlayer/types";
3
3
 
4
4
  //#region src/buildIntlayerDictionary/writeRemoteDictionary.d.ts
@@ -19,7 +19,7 @@ import { Dictionary } from "@intlayer/types";
19
19
  * // { key: 'home', content: { ... } },
20
20
  * ```
21
21
  */
22
- declare const writeRemoteDictionary: (remoteDictionaries: Dictionary[], configuration?: _intlayer_types1.IntlayerConfig) => Promise<Dictionary[]>;
22
+ declare const writeRemoteDictionary: (remoteDictionaries: Dictionary[], configuration?: _intlayer_types5.IntlayerConfig) => Promise<Dictionary[]>;
23
23
  //#endregion
24
24
  export { writeRemoteDictionary };
25
25
  //# sourceMappingURL=writeRemoteDictionary.d.ts.map
@@ -1,10 +1,10 @@
1
- import * as _intlayer_types7 from "@intlayer/types";
1
+ import * as _intlayer_types1 from "@intlayer/types";
2
2
 
3
3
  //#region src/createDictionaryEntryPoint/createDictionaryEntryPoint.d.ts
4
4
  /**
5
5
  * This function generates a list of dictionaries in the main directory
6
6
  */
7
- declare const createDictionaryEntryPoint: (configuration?: _intlayer_types7.IntlayerConfig, formats?: ("cjs" | "esm")[]) => Promise<void>;
7
+ declare const createDictionaryEntryPoint: (configuration?: _intlayer_types1.IntlayerConfig, formats?: ("cjs" | "esm")[]) => Promise<void>;
8
8
  //#endregion
9
9
  export { createDictionaryEntryPoint };
10
10
  //# sourceMappingURL=createDictionaryEntryPoint.d.ts.map
@@ -1,10 +1,10 @@
1
- import * as _intlayer_types8 from "@intlayer/types";
1
+ import * as _intlayer_types0 from "@intlayer/types";
2
2
 
3
3
  //#region src/createDictionaryEntryPoint/generateDictionaryListContent.d.ts
4
4
  /**
5
5
  * This function generates the content of the dictionary list file
6
6
  */
7
- declare const generateDictionaryListContent: (dictionaries: string[], functionName: string, format?: "cjs" | "esm", configuration?: _intlayer_types8.IntlayerConfig) => string;
7
+ declare const generateDictionaryListContent: (dictionaries: string[], functionName: string, format?: "cjs" | "esm", configuration?: _intlayer_types0.IntlayerConfig) => string;
8
8
  //#endregion
9
9
  export { generateDictionaryListContent };
10
10
  //# sourceMappingURL=generateDictionaryListContent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createType.d.ts","names":[],"sources":["../../../src/createType/createType.ts"],"sourcesContent":[],"mappings":";;;cAKa,qCAAsC;;AAAnD;AAQA;cAAa,0DAEI,mBACd"}
1
+ {"version":3,"file":"createType.d.ts","names":[],"sources":["../../../src/createType/createType.ts"],"sourcesContent":[],"mappings":";;;cAMa,qCAAsC;;AAAnD;AAQA;cAAa,0DAEI,mBACd"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intlayer/chokidar",
3
- "version": "7.0.0-canary.2",
3
+ "version": "7.0.0-canary.3",
4
4
  "private": false,
5
5
  "description": "Uses chokidar to scan and build Intlayer declaration files into dictionaries based on Intlayer configuration.",
6
6
  "keywords": [
@@ -71,13 +71,13 @@
71
71
  "typecheck": "tsc --noEmit --project tsconfig.types.json"
72
72
  },
73
73
  "dependencies": {
74
- "@intlayer/api": "7.0.0-canary.2",
75
- "@intlayer/config": "7.0.0-canary.2",
76
- "@intlayer/core": "7.0.0-canary.2",
77
- "@intlayer/dictionaries-entry": "7.0.0-canary.2",
78
- "@intlayer/remote-dictionaries-entry": "7.0.0-canary.2",
79
- "@intlayer/types": "7.0.0-canary.2",
80
- "@intlayer/unmerged-dictionaries-entry": "7.0.0-canary.2",
74
+ "@intlayer/api": "7.0.0-canary.3",
75
+ "@intlayer/config": "7.0.0-canary.3",
76
+ "@intlayer/core": "7.0.0-canary.3",
77
+ "@intlayer/dictionaries-entry": "7.0.0-canary.3",
78
+ "@intlayer/remote-dictionaries-entry": "7.0.0-canary.3",
79
+ "@intlayer/types": "7.0.0-canary.3",
80
+ "@intlayer/unmerged-dictionaries-entry": "7.0.0-canary.3",
81
81
  "chokidar": "3.6.0",
82
82
  "crypto-js": "4.2.0",
83
83
  "deep-equal": "2.2.3",
@@ -90,22 +90,22 @@
90
90
  "@types/crypto-js": "4.2.2",
91
91
  "@types/deep-equal": "1.0.4",
92
92
  "@types/node": "24.9.1",
93
- "@utils/ts-config": "7.0.0-canary.2",
94
- "@utils/ts-config-types": "7.0.0-canary.2",
95
- "@utils/tsdown-config": "7.0.0-canary.2",
93
+ "@utils/ts-config": "7.0.0-canary.3",
94
+ "@utils/ts-config-types": "7.0.0-canary.3",
95
+ "@utils/tsdown-config": "7.0.0-canary.3",
96
96
  "rimraf": "6.0.1",
97
97
  "tsdown": "0.15.9",
98
98
  "typescript": "5.9.3",
99
99
  "vitest": "4.0.3"
100
100
  },
101
101
  "peerDependencies": {
102
- "@intlayer/api": "7.0.0-canary.2",
103
- "@intlayer/config": "7.0.0-canary.2",
104
- "@intlayer/core": "7.0.0-canary.2",
105
- "@intlayer/dictionaries-entry": "7.0.0-canary.2",
106
- "@intlayer/remote-dictionaries-entry": "7.0.0-canary.2",
107
- "@intlayer/types": "7.0.0-canary.2",
108
- "@intlayer/unmerged-dictionaries-entry": "7.0.0-canary.2",
102
+ "@intlayer/api": "7.0.0-canary.3",
103
+ "@intlayer/config": "7.0.0-canary.3",
104
+ "@intlayer/core": "7.0.0-canary.3",
105
+ "@intlayer/dictionaries-entry": "7.0.0-canary.3",
106
+ "@intlayer/remote-dictionaries-entry": "7.0.0-canary.3",
107
+ "@intlayer/types": "7.0.0-canary.3",
108
+ "@intlayer/unmerged-dictionaries-entry": "7.0.0-canary.3",
109
109
  "fast-glob": "3.3.3"
110
110
  },
111
111
  "engines": {