npm package diff
Package: @forge/bundler
Versions: 6.1.4-next.0 - 6.1.4-next.1
File: package/out/metadata.js
Index: package/out/metadata.js
===================================================================
--- package/out/metadata.js
+++ package/out/metadata.js
@@ -0,0 +1,94 @@
+"use strict";
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.getMetadata = void 0;
+const tslib_1 = require("tslib");
+const promises_1 = require("fs/promises");
+const path_1 = tslib_1.__importDefault(require("path"));
+const parser = tslib_1.__importStar(require("@babel/parser"));
+const traverse_1 = tslib_1.__importDefault(require("@babel/traverse"));
+const text_1 = require("./text");
+const types_1 = require("./types");
+async function getMetadata(logger, files) {
+ const metadata = (0, types_1.emptyMetadata)();
+ const packageJson = await warnIfFailed(logger, async () => {
+ try {
+ await (0, promises_1.access)('package.json');
+ }
+ catch {
+ return undefined;
+ }
+ const packageFile = await (0, promises_1.readFile)('package.json', 'utf8');
+ return JSON.parse(packageFile);
+ });
+ if (packageJson?.type === 'module') {
+ metadata.esm = true;
+ }
+ await Promise.all(files.map((filePath) => warnIfFailed(logger, async () => processFile(metadata, filePath))));
+ return metadata;
+}
+exports.getMetadata = getMetadata;
+function packageFromImport(name) {
+ const parts = name.split('/');
+ if (parts.length === 0 || parts[0] === '') {
+ return '';
+ }
+ if (parts[0].startsWith('@')) {
+ return `${parts[0]}/${parts[1]}`;
+ }
+ if (parts[0].startsWith('node:')) {
+ return parts[0].substring(5);
+ }
+ return parts[0];
+}
+async function processFile(metadata, filePath) {
+ const ext = path_1.default.extname(filePath);
+ if (ext.match(/^\.[cm]?jsx?$/)) {
+ metadata.jsFiles++;
+ }
+ else if (ext.match(/^\.[cm]?tsx?$/)) {
+ metadata.tsFiles++;
+ }
+ else if (ext === '.json') {
+ return;
+ }
+ const source = await (0, promises_1.readFile)(filePath, 'utf8');
+ const ast = parser.parse(source, {
+ sourceType: 'module',
+ plugins: ['typescript', 'jsx']
+ });
+ (0, traverse_1.default)(ast, {
+ ImportDeclaration: ({ node }) => {
+ const packageName = packageFromImport(node.source.value);
+ metadata.dependencies.add(packageName);
+ if (packageName.startsWith('@forge/')) {
+ for (const specifier of node.specifiers) {
+ let member;
+ switch (specifier.type) {
+ case 'ImportDefaultSpecifier':
+ case 'ImportNamespaceSpecifier':
+ member = '*';
+ break;
+ case 'ImportSpecifier':
+ switch (specifier.imported.type) {
+ case 'Identifier':
+ member = specifier.imported.name;
+ break;
+ case 'StringLiteral':
+ member = specifier.imported.value;
+ break;
+ }
+ }
+ metadata.sdkImports.add(`${packageName}.${member}`);
+ }
+ }
+ }
+ });
+}
+async function warnIfFailed(logger, action) {
+ try {
+ return await action();
+ }
+ catch (error) {
+ logger.warn(text_1.Text.metadataFailed(error));
+ }
+}