@komaci/common-shared 242.3.3 → 242.3.6

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.
@@ -80,6 +80,15 @@ export declare const updateAliasForImport: (lookupName: string, referencedName:
80
80
  export declare function getImportTemplateKomaciDocByResourceName(resourceName: string, templateKomaciDocMap?: {
81
81
  [fName: string]: KomaciDocument;
82
82
  }): KomaciDocument | undefined;
83
+ /**
84
+ * multiple things can import something with the same base name before we fully process ast
85
+ * this makes sure we get import metadata for the right namespace.
86
+ * @param name the import name
87
+ * @param namespace the namespace to insure we get from
88
+ * @param moduleMetadata module metadata
89
+ * @returns the import if we could find it
90
+ */
91
+ export declare function getImportFromNamespace(name: string, namespace: string, moduleMetadata: ModuleMetadata): ImportMetadata | undefined;
83
92
  /**
84
93
  * pull all needful import metadata we can from the ast
85
94
  * for the most part, we can grab data from the komaci document for imports but sometimes
@@ -94,6 +103,14 @@ export declare function getImportTemplateKomaciDocByResourceName(resourceName: s
94
103
  * @param ast ast for the given component
95
104
  */
96
105
  export declare const collectImportMetadataFromAst: (ast: t.File, moduleMetadata: ModuleMetadata) => void;
106
+ /**
107
+ * Find the other import metadata object that references the same import with a different alias
108
+ * @param resourceName import resource path
109
+ * @param importedName the name as it comes from the import, an exported name, `default` or `*`
110
+ * @param moduleMetadata module metadata for this component
111
+ * @returns the import metadata if it is found
112
+ */
113
+ export declare const findOtherAlias: (resourceName: string, importedName: string, moduleMetadata: ModuleMetadata) => ImportMetadata | undefined;
97
114
  /**
98
115
  * From a given adg, collect as much metadata as possible ONLY from the komaci document
99
116
  *
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isTemplateImport = exports.upliftFakePropsFromTemplate = exports.reconcileDefaultAdg = exports.isImportInvalid = exports.reconcilePrimingAdapater = exports.reconcileWireReference = exports.composeWireFunctionMetadata = exports.addTemplateUsageForAdg = exports.mapExportNamesToAdgs = exports.initalizeAdgMetadata = exports.collectImportMetadataFromAst = exports.getImportTemplateKomaciDocByResourceName = exports.updateAliasForImport = exports.addNewImportFromAst = exports.reconcileImport = exports.reconcileNamespace = exports.traverseAstImports = exports.composeImportMetadata = exports.initializeImportMetdataFromKomaciDocument = exports.initAdgMetadataObject = exports.initModuleMetadataObject = exports.NO_KOMACI_DOC_REF = void 0;
3
+ exports.isTemplateImport = exports.upliftFakePropsFromTemplate = exports.reconcileDefaultAdg = exports.isImportInvalid = exports.reconcilePrimingAdapater = exports.reconcileWireReference = exports.composeWireFunctionMetadata = exports.addTemplateUsageForAdg = exports.mapExportNamesToAdgs = exports.initalizeAdgMetadata = exports.findOtherAlias = exports.collectImportMetadataFromAst = exports.getImportFromNamespace = exports.getImportTemplateKomaciDocByResourceName = exports.updateAliasForImport = exports.addNewImportFromAst = exports.reconcileImport = exports.reconcileNamespace = exports.traverseAstImports = exports.composeImportMetadata = exports.initializeImportMetdataFromKomaciDocument = exports.initAdgMetadataObject = exports.initModuleMetadataObject = exports.NO_KOMACI_DOC_REF = void 0;
4
4
  const allowlistNamespaces_1 = require("./allowlistNamespaces");
5
5
  const komaciDocumentIntrospection_1 = require("./komaciDocumentIntrospection");
6
6
  const types_1 = require("./types");
@@ -54,6 +54,7 @@ const initializeImportMetdataFromKomaciDocument = (doc, moduleMetadata, template
54
54
  const namespace = {
55
55
  names,
56
56
  isSupported,
57
+ originalNames: names,
57
58
  resourceName: importNamespace.resourceName,
58
59
  isDefaultSpecifier: names.has('default'),
59
60
  isNamespaceSpecifier: names.has('*'),
@@ -62,7 +63,10 @@ const initializeImportMetdataFromKomaciDocument = (doc, moduleMetadata, template
62
63
  for (let j = 0; j < importNamespace.names.length; j++) {
63
64
  const name = importNamespace.names[j];
64
65
  const komaciDocImportRef = `${i}/names/${j}`;
65
- const importAlias = moduleMetadata.importsByName.has(name)
66
+ // komaci doc references to other resolvable modules aren't going to ever be referenced by name so we can hoist them with the extra namespace
67
+ // this prevents collisions between the resolvable module and regular import
68
+ const importAlias = moduleMetadata.importsByName.has(name) ||
69
+ importNamespace.resourceName.startsWith('@salesforce/komaci')
66
70
  ? `${name}-${importNamespace.resourceName}`
67
71
  : undefined;
68
72
  (0, exports.composeImportMetadata)(name, importNamespace.resourceName, isSupported, templateAdgIndex !== undefined
@@ -200,6 +204,7 @@ const reconcileNamespace = (resourceName, moduleMetadata) => {
200
204
  if (!namespace) {
201
205
  namespace = {
202
206
  names: new Set(),
207
+ originalNames: new Set(),
203
208
  isSupported: allowlistNamespaces_1.isLocalHtmlImportReference.exec(resourceName)
204
209
  ? (0, allowlistNamespaces_1.isSupportedNamespace)(resourceName)
205
210
  : (0, allowlistNamespaces_1.isNamespaceInternal)((0, allowlistNamespaces_1.getNamespaceFromImport)(resourceName)),
@@ -252,6 +257,13 @@ const addNewImportFromAst = (referencedName, namespace, moduleMetadata, original
252
257
  }
253
258
  moduleMetadata.importsByName.set(referencedName, importMetadata);
254
259
  namespace.names.add(referencedName);
260
+ namespace.originalNames.add(originalImportName || referencedName);
261
+ if (originalImportName === 'default') {
262
+ namespace.isDefaultSpecifier = true;
263
+ }
264
+ else if (originalImportName === '*') {
265
+ namespace.isNamespaceSpecifier = true;
266
+ }
255
267
  };
256
268
  exports.addNewImportFromAst = addNewImportFromAst;
257
269
  /**
@@ -263,13 +275,14 @@ exports.addNewImportFromAst = addNewImportFromAst;
263
275
  * @param originalImportName (optional) the original name of the import that has been aliases. undefined if no alias.
264
276
  */
265
277
  const updateAliasForImport = (lookupName, referencedName, namespace, moduleMetadata, originalImportName) => {
266
- const importMetadata = moduleMetadata.importsByName.get(lookupName);
278
+ const importMetadata = getImportFromNamespace(lookupName, namespace.resourceName, moduleMetadata);
267
279
  if (originalImportName && referencedName !== originalImportName && importMetadata) {
268
280
  const isDefaultOrNamespace = originalImportName === '*' || originalImportName === 'default';
281
+ const oldAlias = importMetadata.importAlias || lookupName;
269
282
  importMetadata.importAlias = referencedName;
283
+ moduleMetadata.importsByName.delete(oldAlias);
270
284
  moduleMetadata.importsByName.set(referencedName, importMetadata);
271
- moduleMetadata.importsByName.delete(lookupName);
272
- namespace.names.delete(isDefaultOrNamespace ? originalImportName : lookupName);
285
+ namespace.names.delete(isDefaultOrNamespace ? originalImportName : oldAlias);
273
286
  namespace.names.add(referencedName);
274
287
  if (importMetadata.komaciDocImportRef !== exports.NO_KOMACI_DOC_REF) {
275
288
  moduleMetadata.importIndexReference.set(importMetadata.komaciDocImportRef, referencedName);
@@ -294,6 +307,22 @@ function getImportTemplateKomaciDocByResourceName(resourceName, templateKomaciDo
294
307
  return templateImportKomaciDoc;
295
308
  }
296
309
  exports.getImportTemplateKomaciDocByResourceName = getImportTemplateKomaciDocByResourceName;
310
+ /**
311
+ * multiple things can import something with the same base name before we fully process ast
312
+ * this makes sure we get import metadata for the right namespace.
313
+ * @param name the import name
314
+ * @param namespace the namespace to insure we get from
315
+ * @param moduleMetadata module metadata
316
+ * @returns the import if we could find it
317
+ */
318
+ function getImportFromNamespace(name, namespace, moduleMetadata) {
319
+ let importMetadata = moduleMetadata.importsByName.get(name);
320
+ if (importMetadata?.resourceName !== namespace) {
321
+ importMetadata = moduleMetadata.importsByName.get(`${name}-${namespace}`);
322
+ }
323
+ return importMetadata;
324
+ }
325
+ exports.getImportFromNamespace = getImportFromNamespace;
297
326
  /**
298
327
  * pull all needful import metadata we can from the ast
299
328
  * for the most part, we can grab data from the komaci document for imports but sometimes
@@ -310,15 +339,45 @@ exports.getImportTemplateKomaciDocByResourceName = getImportTemplateKomaciDocByR
310
339
  const collectImportMetadataFromAst = (ast, moduleMetadata) => {
311
340
  (0, exports.traverseAstImports)(ast, (lookupName, referencedName, resourceName, originalImportName) => {
312
341
  const namespace = (0, exports.reconcileNamespace)(resourceName, moduleMetadata);
313
- if (!moduleMetadata.importsByName.has(lookupName)) {
342
+ const existingImportMetadata = getImportFromNamespace(lookupName, resourceName, moduleMetadata);
343
+ if (!namespace.originalNames.has(originalImportName || referencedName)) {
314
344
  (0, exports.addNewImportFromAst)(referencedName, namespace, moduleMetadata, originalImportName);
315
345
  }
316
346
  else {
347
+ const importMetadata = (0, exports.findOtherAlias)(resourceName, originalImportName || referencedName, moduleMetadata);
348
+ if (importMetadata) {
349
+ moduleMetadata.importsByName.set(referencedName, importMetadata);
350
+ }
351
+ }
352
+ if (existingImportMetadata &&
353
+ existingImportMetadata.komaciDocImportRef !== exports.NO_KOMACI_DOC_REF &&
354
+ (!existingImportMetadata.importAlias ||
355
+ existingImportMetadata.importAlias ===
356
+ `${existingImportMetadata.name}-${resourceName}` ||
357
+ existingImportMetadata.importAlias === `namespace-${resourceName}`) &&
358
+ existingImportMetadata.name !== referencedName) {
317
359
  (0, exports.updateAliasForImport)(lookupName, referencedName, namespace, moduleMetadata, originalImportName);
318
360
  }
319
361
  });
320
362
  };
321
363
  exports.collectImportMetadataFromAst = collectImportMetadataFromAst;
364
+ /**
365
+ * Find the other import metadata object that references the same import with a different alias
366
+ * @param resourceName import resource path
367
+ * @param importedName the name as it comes from the import, an exported name, `default` or `*`
368
+ * @param moduleMetadata module metadata for this component
369
+ * @returns the import metadata if it is found
370
+ */
371
+ const findOtherAlias = (resourceName, importedName, moduleMetadata) => {
372
+ for (const importMetadata of moduleMetadata.importsByName.values()) {
373
+ if (importMetadata.resourceName === resourceName &&
374
+ importMetadata.name === importedName) {
375
+ return importMetadata;
376
+ }
377
+ }
378
+ return undefined;
379
+ };
380
+ exports.findOtherAlias = findOtherAlias;
322
381
  /**
323
382
  * From a given adg, collect as much metadata as possible ONLY from the komaci document
324
383
  *
package/build/types.d.ts CHANGED
@@ -56,6 +56,8 @@ export declare type ImportDetail = {
56
56
  resourceName: string;
57
57
  /** The names of the specific things imported */
58
58
  names: Set<string>;
59
+ /** unique un-aliased names for all of the things imported. can include the specials like default and * */
60
+ originalNames: Set<string>;
59
61
  /** If this import is a namespace */
60
62
  isNamespaceSpecifier: boolean;
61
63
  /** If this import contains a default specifier */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@komaci/common-shared",
3
- "version": "242.3.3",
3
+ "version": "242.3.6",
4
4
  "description": "Assets that are shared across Komaci commonjs packages",
5
5
  "homepage": "https://komaci.dev/",
6
6
  "repository": {
@@ -29,7 +29,7 @@
29
29
  "build/komaci-mapping.json"
30
30
  ],
31
31
  "devDependencies": {
32
- "@komaci/types": "242.3.3"
32
+ "@komaci/types": "242.3.6"
33
33
  },
34
34
  "dependencies": {
35
35
  "@babel/core": "^7.9.0",