@ms-cloudpack/config 0.24.2 → 0.25.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.
@@ -1,4 +1,4 @@
1
- import type { CloudpackConfig, PackageDefinitionTransform } from '@ms-cloudpack/common-types';
1
+ import { type CloudpackConfig, type PackageDefinitionTransform } from '@ms-cloudpack/common-types';
2
2
  /**
3
3
  * Creates a transform to be registered with a PackageDefinitions registry for updating package.json
4
4
  * based on package settings from the config.
@@ -1 +1 @@
1
- {"version":3,"file":"createPackageSettingsTransform.d.ts","sourceRoot":"","sources":["../src/createPackageSettingsTransform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,0BAA0B,EAM3B,MAAM,4BAA4B,CAAC;AAKpC;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,eAAe,GAAG,0BAA0B,CA4ClG"}
1
+ {"version":3,"file":"createPackageSettingsTransform.d.ts","sourceRoot":"","sources":["../src/createPackageSettingsTransform.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,0BAA0B,EAOhC,MAAM,4BAA4B,CAAC;AAKpC;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,eAAe,GAAG,0BAA0B,CA4ClG"}
@@ -1,5 +1,5 @@
1
1
  import { getPackageSettings } from './getPackageSettings.js';
2
- import { getExportsMap } from '@ms-cloudpack/package-utilities';
2
+ import { addExportsMapEntry, getExportsMap } from '@ms-cloudpack/package-utilities';
3
3
  import { mergePackageSettings } from './mergePackageSettings.js';
4
4
  /**
5
5
  * Creates a transform to be registered with a PackageDefinitions registry for updating package.json
@@ -80,11 +80,48 @@ function computeDependencies(options) {
80
80
  }
81
81
  async function computeExports(options, context) {
82
82
  const { packagePath, definition, userPackageSettings, generatedPackageSettings } = options;
83
- let exports = userPackageSettings?.exports ||
83
+ const { appPath } = context.config;
84
+ const exports = [];
85
+ // If this is the app package, ensure the routes are part of the exports map.
86
+ if (appPath === packagePath) {
87
+ const { routes = [] } = context.config;
88
+ const routeExports = {};
89
+ let hasRouteExports = false;
90
+ for (const route of routes) {
91
+ const { entry } = route;
92
+ if (entry?.length) {
93
+ for (const entryItem of entry) {
94
+ hasRouteExports =
95
+ (await addExportsMapEntry({
96
+ exports: routeExports,
97
+ packagePath,
98
+ environmentCondition: 'browser',
99
+ filePath: entryItem.sourcePath,
100
+ importPath: entryItem.importPath,
101
+ }, context)) || hasRouteExports;
102
+ }
103
+ }
104
+ }
105
+ // Insert them at the start, so that future exports have precedence.
106
+ if (hasRouteExports) {
107
+ // We short circuit here because we don't want to include any unused exports that might
108
+ // be pulled from package.json.
109
+ return routeExports;
110
+ }
111
+ }
112
+ // Push exports from the package.
113
+ exports.push(userPackageSettings?.exports ||
84
114
  definition.exports ||
85
- (await getExportsMap({ packagePath, disableTransforms: true }, context));
115
+ (await getExportsMap({ packagePath, disableTransforms: true }, context)));
116
+ // Push generated exports.
86
117
  if (generatedPackageSettings?.exports) {
87
- exports = [exports, generatedPackageSettings.exports];
118
+ exports.push(generatedPackageSettings.exports);
119
+ }
120
+ if (exports.length === 0) {
121
+ return undefined;
122
+ }
123
+ if (exports.length === 1) {
124
+ return exports[0];
88
125
  }
89
126
  return exports;
90
127
  }
@@ -1 +1 @@
1
- {"version":3,"file":"createPackageSettingsTransform.js","sourceRoot":"","sources":["../src/createPackageSettingsTransform.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n CloudpackConfig,\n PackageDefinitionTransform,\n PackageDefinitionsCache,\n PackageJson,\n PackageJsonDependencies,\n PackageJsonExports,\n PackageSettings,\n} from '@ms-cloudpack/common-types';\nimport { getPackageSettings } from './getPackageSettings.js';\nimport { getExportsMap } from '@ms-cloudpack/package-utilities';\nimport { mergePackageSettings } from './mergePackageSettings.js';\n\n/**\n * Creates a transform to be registered with a PackageDefinitions registry for updating package.json\n * based on package settings from the config.\n */\nexport function createPackageSettingsTransform(config: CloudpackConfig): PackageDefinitionTransform {\n return async ({ definition, packagePath, packages }) => {\n const { name = '', version = '' } = definition;\n const { userPackageSettings, generatedPackageSettings } = getPackageSettings({\n name,\n version,\n userPackageSettings: config.packageSettings,\n generatedPackageSettings: config.generated.packageSettings,\n });\n\n // Exclude all things not important in preserving within the package.json. This limits what we end up hashing\n // when we hash the definition.\n const { exports, includedDependencies, excludedDependencies, ...settings } = mergePackageSettings([\n userPackageSettings || {},\n generatedPackageSettings || {},\n ]);\n\n const newDefinition: PackageJson = {\n name,\n version,\n exports: await computeExports(\n { packagePath, definition, userPackageSettings, generatedPackageSettings },\n { packages, config },\n ),\n dependencies: computeDependencies({ definition, userPackageSettings, generatedPackageSettings }),\n };\n\n if (definition.peerDependencies && !userPackageSettings?.excludedDependencies?.includes('$peerDependencies')) {\n newDefinition.peerDependencies = !excludedDependencies?.length\n ? definition.peerDependencies\n : Object.fromEntries(\n Object.entries(definition.peerDependencies).filter(([dep]) => !excludedDependencies.includes(dep)),\n );\n }\n\n if (config.mode || Object.keys(settings).length > 0) {\n newDefinition.cloudpack = {\n mode: config.mode,\n ...settings,\n };\n }\n\n return newDefinition;\n };\n}\n\nfunction computeDependencies(options: {\n definition: PackageJson;\n userPackageSettings?: PackageSettings;\n generatedPackageSettings?: PackageSettings;\n}): PackageJsonDependencies {\n const { definition, userPackageSettings, generatedPackageSettings } = options;\n const { dependencies = {} } = definition;\n const newDependencies = { ...dependencies };\n\n // If we have included dependencies, add them.\n const includedDependencies = [\n ...(userPackageSettings?.includedDependencies || []),\n ...(generatedPackageSettings?.includedDependencies || []),\n ];\n\n // Expand the $devDependencies placeholder to the actual dev dependencies.\n const includeDevDependencies = includedDependencies.indexOf('$devDependencies');\n\n if (includeDevDependencies !== -1) {\n includedDependencies.splice(includeDevDependencies, 1, ...Object.keys(definition.devDependencies || {}));\n }\n\n // Add the dependency from other sources, or use a wildcard.\n for (const dep of includedDependencies) {\n newDependencies[dep] =\n definition.dependencies?.[dep] ||\n definition.devDependencies?.[dep] ||\n definition.peerDependencies?.[dep] ||\n definition.optionalDependencies?.[dep] ||\n '*';\n }\n\n const excludedDependencies = [\n ...(userPackageSettings?.excludedDependencies || []),\n ...(generatedPackageSettings?.excludedDependencies || []),\n ];\n\n // Expand the $peerDependencies placeholder to the actual peer dependencies.\n const excludePeerDependencies = excludedDependencies.indexOf('$peerDependencies');\n\n if (excludePeerDependencies !== -1) {\n // Add peer dependencies to the list of excluded dependencies.\n excludedDependencies.splice(excludePeerDependencies, 1, ...Object.keys(definition.peerDependencies || {}));\n }\n\n for (const dep of excludedDependencies) {\n delete newDependencies[dep];\n }\n\n return newDependencies;\n}\n\nasync function computeExports(\n options: {\n packagePath: string;\n definition: PackageJson;\n userPackageSettings?: PackageSettings;\n generatedPackageSettings?: PackageSettings;\n },\n context: { packages: PackageDefinitionsCache; config: CloudpackConfig },\n): Promise<PackageJsonExports | undefined> {\n const { packagePath, definition, userPackageSettings, generatedPackageSettings } = options;\n\n let exports =\n userPackageSettings?.exports ||\n definition.exports ||\n (await getExportsMap({ packagePath, disableTransforms: true }, context));\n\n if (generatedPackageSettings?.exports) {\n exports = [exports, generatedPackageSettings.exports];\n }\n\n return exports;\n}\n"]}
1
+ {"version":3,"file":"createPackageSettingsTransform.js","sourceRoot":"","sources":["../src/createPackageSettingsTransform.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n type CloudpackConfig,\n type PackageDefinitionTransform,\n type PackageDefinitionsCache,\n type PackageJson,\n type PackageJsonDependencies,\n type PackageJsonExports,\n type PackageSettings,\n type RenderedRoute,\n} from '@ms-cloudpack/common-types';\nimport { getPackageSettings } from './getPackageSettings.js';\nimport { addExportsMapEntry, getExportsMap } from '@ms-cloudpack/package-utilities';\nimport { mergePackageSettings } from './mergePackageSettings.js';\n\n/**\n * Creates a transform to be registered with a PackageDefinitions registry for updating package.json\n * based on package settings from the config.\n */\nexport function createPackageSettingsTransform(config: CloudpackConfig): PackageDefinitionTransform {\n return async ({ definition, packagePath, packages }) => {\n const { name = '', version = '' } = definition;\n const { userPackageSettings, generatedPackageSettings } = getPackageSettings({\n name,\n version,\n userPackageSettings: config.packageSettings,\n generatedPackageSettings: config.generated.packageSettings,\n });\n\n // Exclude all things not important in preserving within the package.json. This limits what we end up hashing\n // when we hash the definition.\n const { exports, includedDependencies, excludedDependencies, ...settings } = mergePackageSettings([\n userPackageSettings || {},\n generatedPackageSettings || {},\n ]);\n\n const newDefinition: PackageJson = {\n name,\n version,\n exports: await computeExports(\n { packagePath, definition, userPackageSettings, generatedPackageSettings },\n { packages, config },\n ),\n dependencies: computeDependencies({ definition, userPackageSettings, generatedPackageSettings }),\n };\n\n if (definition.peerDependencies && !userPackageSettings?.excludedDependencies?.includes('$peerDependencies')) {\n newDefinition.peerDependencies = !excludedDependencies?.length\n ? definition.peerDependencies\n : Object.fromEntries(\n Object.entries(definition.peerDependencies).filter(([dep]) => !excludedDependencies.includes(dep)),\n );\n }\n\n if (config.mode || Object.keys(settings).length > 0) {\n newDefinition.cloudpack = {\n mode: config.mode,\n ...settings,\n };\n }\n\n return newDefinition;\n };\n}\n\nfunction computeDependencies(options: {\n definition: PackageJson;\n userPackageSettings?: PackageSettings;\n generatedPackageSettings?: PackageSettings;\n}): PackageJsonDependencies {\n const { definition, userPackageSettings, generatedPackageSettings } = options;\n const { dependencies = {} } = definition;\n const newDependencies = { ...dependencies };\n\n // If we have included dependencies, add them.\n const includedDependencies = [\n ...(userPackageSettings?.includedDependencies || []),\n ...(generatedPackageSettings?.includedDependencies || []),\n ];\n\n // Expand the $devDependencies placeholder to the actual dev dependencies.\n const includeDevDependencies = includedDependencies.indexOf('$devDependencies');\n\n if (includeDevDependencies !== -1) {\n includedDependencies.splice(includeDevDependencies, 1, ...Object.keys(definition.devDependencies || {}));\n }\n\n // Add the dependency from other sources, or use a wildcard.\n for (const dep of includedDependencies) {\n newDependencies[dep] =\n definition.dependencies?.[dep] ||\n definition.devDependencies?.[dep] ||\n definition.peerDependencies?.[dep] ||\n definition.optionalDependencies?.[dep] ||\n '*';\n }\n\n const excludedDependencies = [\n ...(userPackageSettings?.excludedDependencies || []),\n ...(generatedPackageSettings?.excludedDependencies || []),\n ];\n\n // Expand the $peerDependencies placeholder to the actual peer dependencies.\n const excludePeerDependencies = excludedDependencies.indexOf('$peerDependencies');\n\n if (excludePeerDependencies !== -1) {\n // Add peer dependencies to the list of excluded dependencies.\n excludedDependencies.splice(excludePeerDependencies, 1, ...Object.keys(definition.peerDependencies || {}));\n }\n\n for (const dep of excludedDependencies) {\n delete newDependencies[dep];\n }\n\n return newDependencies;\n}\n\nasync function computeExports(\n options: {\n packagePath: string;\n definition: PackageJson;\n userPackageSettings?: PackageSettings;\n generatedPackageSettings?: PackageSettings;\n },\n context: { packages: PackageDefinitionsCache; config: CloudpackConfig },\n): Promise<PackageJsonExports | undefined> {\n const { packagePath, definition, userPackageSettings, generatedPackageSettings } = options;\n const { appPath } = context.config;\n const exports = [];\n\n // If this is the app package, ensure the routes are part of the exports map.\n if (appPath === packagePath) {\n const { routes = [] } = context.config;\n const routeExports = {};\n let hasRouteExports = false;\n\n for (const route of routes) {\n const { entry } = route as RenderedRoute;\n\n if (entry?.length) {\n for (const entryItem of entry) {\n hasRouteExports =\n (await addExportsMapEntry(\n {\n exports: routeExports,\n packagePath,\n environmentCondition: 'browser',\n filePath: entryItem.sourcePath,\n importPath: entryItem.importPath,\n },\n context,\n )) || hasRouteExports;\n }\n }\n }\n\n // Insert them at the start, so that future exports have precedence.\n if (hasRouteExports) {\n // We short circuit here because we don't want to include any unused exports that might\n // be pulled from package.json.\n return routeExports;\n }\n }\n\n // Push exports from the package.\n exports.push(\n userPackageSettings?.exports ||\n definition.exports ||\n (await getExportsMap({ packagePath, disableTransforms: true }, context)),\n );\n\n // Push generated exports.\n if (generatedPackageSettings?.exports) {\n exports.push(generatedPackageSettings.exports);\n }\n\n if (exports.length === 0) {\n return undefined;\n }\n\n if (exports.length === 1) {\n return exports[0];\n }\n\n return exports;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"readConfig.d.ts","sourceRoot":"","sources":["../src/readConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAI9E;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,UAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CAexG"}
1
+ {"version":3,"file":"readConfig.d.ts","sourceRoot":"","sources":["../src/readConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EAKhB,MAAM,4BAA4B,CAAC;AASpC;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,UAAsB,GAAG,OAAO,CAAC,eAAe,CAAC,CAcxG"}
package/lib/readConfig.js CHANGED
@@ -1,5 +1,9 @@
1
1
  import { readAppConfig } from './readAppConfig.js';
2
2
  import { readGeneratedConfig } from './readGeneratedConfig.js';
3
+ import { intermediateToSourcePath, sourceToIntermediatePath } from '@ms-cloudpack/path-utilities';
4
+ import { flattenExportsMap } from '@ms-cloudpack/package-utilities';
5
+ import path from 'path';
6
+ import { readJson } from '@ms-cloudpack/json-utilities';
3
7
  /**
4
8
  * Reads the config file asynchronously (and merges generated config into the result.)
5
9
  */
@@ -13,23 +17,85 @@ export async function readConfig(appPath, mode = 'library') {
13
17
  generatedSnapshot: structuredClone(generatedConfig),
14
18
  };
15
19
  // Expands all routes which refer to source files into fully transformed route objects.
16
- expandRouteShorthandEntries(config);
20
+ await expandRouteShorthandEntries(config, appPath);
17
21
  return config;
18
22
  }
19
23
  /**
20
- *
21
- * @param config
24
+ * Ensure all source entries in route are expanded to fully qualified entry paths.
22
25
  */
23
- function expandRouteShorthandEntries(config) {
26
+ async function expandRouteShorthandEntries(config, appPath) {
24
27
  const { routes } = config;
25
- if (routes) {
26
- for (let i = 0; i < routes.length; i++) {
27
- const route = routes[i];
28
- if (typeof route === 'string') {
29
- routes[i] = { match: route, entry: route };
30
- break;
28
+ let definition;
29
+ if (routes?.length) {
30
+ for (const route of routes) {
31
+ const shorthandRoute = route;
32
+ const renderedRoute = route;
33
+ renderedRoute.entry = ensureArray(shorthandRoute.entry)?.map((filePath) => expandRouteEntry({
34
+ filePath,
35
+ appPath,
36
+ }));
37
+ // eslint-disable-next-line etc/no-deprecated
38
+ if (shorthandRoute.exportEntry) {
39
+ if (!definition) {
40
+ // We can't use PackageDefinitions.get here because we're reading the config, and definitions
41
+ // cache requires config resulting in a cycle.
42
+ definition = await readJson(path.join(appPath, 'package.json'));
43
+ }
44
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
45
+ expandDeprecatedExportEntry(route, definition, appPath);
31
46
  }
32
47
  }
33
48
  }
34
49
  }
50
+ /**
51
+ * Handle backwards compatibility with moving from exportEntry to entry. When exportEntry is deleted,
52
+ * this function can be removed.
53
+ */
54
+ function expandDeprecatedExportEntry(route, definition, appPath) {
55
+ const shorthandRoute = route;
56
+ const renderedRoute = route;
57
+ // eslint-disable-next-line etc/no-deprecated
58
+ const { exportEntry } = shorthandRoute;
59
+ const flattenedExports = flattenExportsMap(definition.exports || {});
60
+ if (exportEntry) {
61
+ renderedRoute.entry = ensureArray(renderedRoute.entry);
62
+ const filePath = flattenedExports[exportEntry] || definition.module || definition.main;
63
+ if (!filePath) {
64
+ throw new Error(`A route referenced exportEntry "${exportEntry}" but this couldn't be resolved from the package.json.`);
65
+ }
66
+ // We are converting the exportEntry to an ExpandedSourcePath so that the route
67
+ // can be returned as a RenderedRoute.
68
+ renderedRoute.entry.push(expandRouteEntry({
69
+ importPath: exportEntry,
70
+ filePath,
71
+ appPath,
72
+ }));
73
+ // eslint-disable-next-line etc/no-deprecated
74
+ delete shorthandRoute.exportEntry;
75
+ }
76
+ }
77
+ /** Ensures the value is an array, or is wrapped in one. If a value is blank, will return a blank array. */
78
+ function ensureArray(value) {
79
+ if (Array.isArray(value)) {
80
+ return value;
81
+ }
82
+ return (value !== undefined ? [value] : []);
83
+ }
84
+ /** Expands shorthand route entries into fully qualified ones. */
85
+ function expandRouteEntry(options) {
86
+ const { filePath, appPath, importPath } = options;
87
+ const sourcePath = intermediateToSourcePath(filePath, appPath);
88
+ if (!sourcePath) {
89
+ throw new Error(`Could not resolve source path for entry: ${filePath}`);
90
+ }
91
+ const intermediatePath = sourceToIntermediatePath(sourcePath);
92
+ return {
93
+ // Used to derive bundle entry path
94
+ sourcePath,
95
+ // Used to derive import map key
96
+ importPath: importPath || intermediatePath,
97
+ // Used to derive import map value
98
+ requestPath: intermediatePath,
99
+ };
100
+ }
35
101
  //# sourceMappingURL=readConfig.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"readConfig.js","sourceRoot":"","sources":["../src/readConfig.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAe,EAAE,OAAmB,SAAS;IAC5E,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAE/G,MAAM,MAAM,GAAG;QACb,GAAG,SAAS;QACZ,OAAO;QACP,IAAI;QACJ,SAAS,EAAE,eAAe;QAC1B,iBAAiB,EAAE,eAAe,CAAC,eAAe,CAAC;KACjC,CAAC;IAErB,uFAAuF;IACvF,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAEpC,OAAO,MAAM,CAAC;AAChB,CAAC;AACD;;;GAGG;AACH,SAAS,2BAA2B,CAAC,MAAuB;IAC1D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAE1B,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;YAExB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC9B,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;gBAC3C,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import type { BundleMode, CloudpackConfig } from '@ms-cloudpack/common-types';\nimport { readAppConfig } from './readAppConfig.js';\nimport { readGeneratedConfig } from './readGeneratedConfig.js';\n\n/**\n * Reads the config file asynchronously (and merges generated config into the result.)\n */\nexport async function readConfig(appPath: string, mode: BundleMode = 'library'): Promise<CloudpackConfig> {\n const [appConfig, generatedConfig] = await Promise.all([readAppConfig(appPath), readGeneratedConfig(appPath)]);\n\n const config = {\n ...appConfig,\n appPath,\n mode,\n generated: generatedConfig,\n generatedSnapshot: structuredClone(generatedConfig),\n } as CloudpackConfig;\n\n // Expands all routes which refer to source files into fully transformed route objects.\n expandRouteShorthandEntries(config);\n\n return config;\n}\n/**\n *\n * @param config\n */\nfunction expandRouteShorthandEntries(config: CloudpackConfig) {\n const { routes } = config;\n\n if (routes) {\n for (let i = 0; i < routes.length; i++) {\n const route = routes[i];\n\n if (typeof route === 'string') {\n routes[i] = { match: route, entry: route };\n break;\n }\n }\n }\n}\n"]}
1
+ {"version":3,"file":"readConfig.js","sourceRoot":"","sources":["../src/readConfig.ts"],"names":[],"mappings":"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","sourcesContent":["import type {\n BundleMode,\n CloudpackConfig,\n PackageJson,\n RenderedRoute,\n Route,\n ShorthandRenderedRoute,\n} from '@ms-cloudpack/common-types';\nimport { readAppConfig } from './readAppConfig.js';\nimport { readGeneratedConfig } from './readGeneratedConfig.js';\nimport { intermediateToSourcePath, sourceToIntermediatePath } from '@ms-cloudpack/path-utilities';\nimport type { ExpandedSourcePath } from '../../common-types/lib/ExpandedSourcePath.js';\nimport { flattenExportsMap } from '@ms-cloudpack/package-utilities';\nimport path from 'path';\nimport { readJson } from '@ms-cloudpack/json-utilities';\n\n/**\n * Reads the config file asynchronously (and merges generated config into the result.)\n */\nexport async function readConfig(appPath: string, mode: BundleMode = 'library'): Promise<CloudpackConfig> {\n const [appConfig, generatedConfig] = await Promise.all([readAppConfig(appPath), readGeneratedConfig(appPath)]);\n const config = {\n ...appConfig,\n appPath,\n mode,\n generated: generatedConfig,\n generatedSnapshot: structuredClone(generatedConfig),\n } as CloudpackConfig;\n\n // Expands all routes which refer to source files into fully transformed route objects.\n await expandRouteShorthandEntries(config, appPath);\n\n return config;\n}\n\n/**\n * Ensure all source entries in route are expanded to fully qualified entry paths.\n */\nasync function expandRouteShorthandEntries(config: CloudpackConfig, appPath: string) {\n const { routes } = config;\n let definition: PackageJson | undefined;\n\n if (routes?.length) {\n for (const route of routes) {\n const shorthandRoute = route as ShorthandRenderedRoute;\n const renderedRoute = route as RenderedRoute;\n\n renderedRoute.entry = ensureArray(shorthandRoute.entry)?.map((filePath) =>\n expandRouteEntry({\n filePath,\n appPath,\n }),\n );\n\n // eslint-disable-next-line etc/no-deprecated\n if (shorthandRoute.exportEntry) {\n if (!definition) {\n // We can't use PackageDefinitions.get here because we're reading the config, and definitions\n // cache requires config resulting in a cycle.\n definition = await readJson<PackageJson>(path.join(appPath, 'package.json'));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n expandDeprecatedExportEntry(route, definition!, appPath);\n }\n }\n }\n}\n\n/**\n * Handle backwards compatibility with moving from exportEntry to entry. When exportEntry is deleted,\n * this function can be removed.\n */\nfunction expandDeprecatedExportEntry(route: Route, definition: PackageJson, appPath: string) {\n const shorthandRoute = route as ShorthandRenderedRoute;\n const renderedRoute = route as RenderedRoute;\n\n // eslint-disable-next-line etc/no-deprecated\n const { exportEntry } = shorthandRoute;\n const flattenedExports = flattenExportsMap(definition.exports || {});\n\n if (exportEntry) {\n renderedRoute.entry = ensureArray(renderedRoute.entry) as unknown as ExpandedSourcePath[];\n\n const filePath = flattenedExports[exportEntry] || definition.module || definition.main;\n\n if (!filePath) {\n throw new Error(\n `A route referenced exportEntry \"${exportEntry}\" but this couldn't be resolved from the package.json.`,\n );\n }\n\n // We are converting the exportEntry to an ExpandedSourcePath so that the route\n // can be returned as a RenderedRoute.\n renderedRoute.entry.push(\n expandRouteEntry({\n importPath: exportEntry,\n filePath,\n appPath,\n }),\n );\n\n // eslint-disable-next-line etc/no-deprecated\n delete shorthandRoute.exportEntry;\n }\n}\n\n/** Ensures the value is an array, or is wrapped in one. If a value is blank, will return a blank array. */\nfunction ensureArray<T>(value?: T): T extends unknown[] ? T : T[] {\n if (Array.isArray(value)) {\n return value as T extends unknown[] ? T : T[];\n }\n\n return (value !== undefined ? [value] : []) as T extends unknown[] ? T : T[];\n}\n\n/** Expands shorthand route entries into fully qualified ones. */\nfunction expandRouteEntry(options: { importPath?: string; filePath: string; appPath: string }): ExpandedSourcePath {\n const { filePath, appPath, importPath } = options;\n const sourcePath = intermediateToSourcePath(filePath, appPath);\n\n if (!sourcePath) {\n throw new Error(`Could not resolve source path for entry: ${filePath}`);\n }\n\n const intermediatePath = sourceToIntermediatePath(sourcePath);\n\n return {\n // Used to derive bundle entry path\n sourcePath,\n // Used to derive import map key\n importPath: importPath || intermediatePath,\n // Used to derive import map value\n requestPath: intermediatePath,\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"writeGeneratedConfig.d.ts","sourceRoot":"","sources":["../src/writeGeneratedConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAMlE;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,iBAWlF"}
1
+ {"version":3,"file":"writeGeneratedConfig.d.ts","sourceRoot":"","sources":["../src/writeGeneratedConfig.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAMlE;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,iBAgBlF"}
@@ -8,11 +8,12 @@ import { cleanGeneratedConfig } from './cleanGeneratedConfig.js';
8
8
  */
9
9
  export async function writeGeneratedConfig(config, appPath) {
10
10
  const { generatedConfigPath } = getConfigPath(appPath);
11
+ const fileHeaderComment = `/**\n * THIS FILE IS AUTO-GENERATED.\n * DO NOT MANUALLY EDIT THIS FILE.\n */\n`;
11
12
  sortGeneratedConfig(config);
12
13
  cleanGeneratedConfig(config);
13
14
  return writeJson(generatedConfigPath, {
14
15
  $schema: generatedAppConfigSchemaUrl,
15
16
  ...config,
16
- });
17
+ }, { fileHeaderComment });
17
18
  }
18
19
  //# sourceMappingURL=writeGeneratedConfig.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"writeGeneratedConfig.js","sourceRoot":"","sources":["../src/writeGeneratedConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAuB,EAAE,OAAe;IACjF,MAAM,EAAE,mBAAmB,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAEvD,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE5B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAE7B,OAAO,SAAS,CAAC,mBAAmB,EAAE;QACpC,OAAO,EAAE,2BAA2B;QACpC,GAAG,MAAM;KACV,CAAC,CAAC;AACL,CAAC","sourcesContent":["import { writeJson } from '@ms-cloudpack/json-utilities';\nimport type { GeneratedConfig } from '@ms-cloudpack/common-types';\nimport { getConfigPath } from './getConfigPath.js';\nimport { generatedAppConfigSchemaUrl } from './schemaUrls.js';\nimport { sortGeneratedConfig } from './sortGeneratedConfig.js';\nimport { cleanGeneratedConfig } from './cleanGeneratedConfig.js';\n\n/**\n * Writes generated config. This is used for `init` to provide package overrides needed.\n */\nexport async function writeGeneratedConfig(config: GeneratedConfig, appPath: string) {\n const { generatedConfigPath } = getConfigPath(appPath);\n\n sortGeneratedConfig(config);\n\n cleanGeneratedConfig(config);\n\n return writeJson(generatedConfigPath, {\n $schema: generatedAppConfigSchemaUrl,\n ...config,\n });\n}\n"]}
1
+ {"version":3,"file":"writeGeneratedConfig.js","sourceRoot":"","sources":["../src/writeGeneratedConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,MAAuB,EAAE,OAAe;IACjF,MAAM,EAAE,mBAAmB,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,iBAAiB,GAAG,iFAAiF,CAAC;IAE5G,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE5B,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAE7B,OAAO,SAAS,CACd,mBAAmB,EACnB;QACE,OAAO,EAAE,2BAA2B;QACpC,GAAG,MAAM;KACV,EACD,EAAE,iBAAiB,EAAE,CACtB,CAAC;AACJ,CAAC","sourcesContent":["import { writeJson } from '@ms-cloudpack/json-utilities';\nimport type { GeneratedConfig } from '@ms-cloudpack/common-types';\nimport { getConfigPath } from './getConfigPath.js';\nimport { generatedAppConfigSchemaUrl } from './schemaUrls.js';\nimport { sortGeneratedConfig } from './sortGeneratedConfig.js';\nimport { cleanGeneratedConfig } from './cleanGeneratedConfig.js';\n\n/**\n * Writes generated config. This is used for `init` to provide package overrides needed.\n */\nexport async function writeGeneratedConfig(config: GeneratedConfig, appPath: string) {\n const { generatedConfigPath } = getConfigPath(appPath);\n const fileHeaderComment = `/**\\n * THIS FILE IS AUTO-GENERATED.\\n * DO NOT MANUALLY EDIT THIS FILE.\\n */\\n`;\n\n sortGeneratedConfig(config);\n\n cleanGeneratedConfig(config);\n\n return writeJson(\n generatedConfigPath,\n {\n $schema: generatedAppConfigSchemaUrl,\n ...config,\n },\n { fileHeaderComment },\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ms-cloudpack/config",
3
- "version": "0.24.2",
3
+ "version": "0.25.1",
4
4
  "description": "Configuration handling for cloudpack.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -14,9 +14,10 @@
14
14
  }
15
15
  },
16
16
  "dependencies": {
17
- "@ms-cloudpack/common-types": "^0.14.0",
18
- "@ms-cloudpack/json-utilities": "^0.1.6",
19
- "@ms-cloudpack/package-utilities": "^8.2.0",
17
+ "@ms-cloudpack/common-types": "^0.15.0",
18
+ "@ms-cloudpack/json-utilities": "^0.1.7",
19
+ "@ms-cloudpack/package-utilities": "^9.0.1",
20
+ "@ms-cloudpack/path-utilities": "^2.7.32",
20
21
  "import-meta-resolve": "^4.0.0",
21
22
  "semver": "^7.6.0"
22
23
  },