mirror of
https://github.com/atom/atom.git
synced 2026-04-06 03:02:13 -04:00
Generate metadata for all package.json files
This commit is contained in:
@@ -11,6 +11,7 @@ const transpileCoffeeScriptPaths = require('./lib/transpile-coffee-script-paths'
|
||||
const transpileCsonPaths = require('./lib/transpile-cson-paths')
|
||||
const transpilePegJsPaths = require('./lib/transpile-peg-js-paths')
|
||||
const generateModuleCache = require('./lib/generate-module-cache')
|
||||
const generateMetadata = require('./lib/generate-metadata')
|
||||
const packageApplication = require('./lib/package-application')
|
||||
|
||||
cleanOutputDirectory()
|
||||
@@ -20,4 +21,5 @@ transpileCoffeeScriptPaths()
|
||||
transpileCsonPaths()
|
||||
transpilePegJsPaths()
|
||||
generateModuleCache()
|
||||
generateMetadata()
|
||||
packageApplication()
|
||||
|
||||
1713
build/deprecated-packages.json
Normal file
1713
build/deprecated-packages.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -14,8 +14,6 @@ module.exports = function () {
|
||||
let srcPaths = [
|
||||
path.join(CONFIG.repositoryRootPath, 'dot-atom'),
|
||||
path.join(CONFIG.repositoryRootPath, 'exports'),
|
||||
path.join(CONFIG.repositoryRootPath, 'keymaps'),
|
||||
path.join(CONFIG.repositoryRootPath, 'menus'),
|
||||
path.join(CONFIG.repositoryRootPath, 'node_modules'),
|
||||
path.join(CONFIG.repositoryRootPath, 'package.json'),
|
||||
path.join(CONFIG.repositoryRootPath, 'static'),
|
||||
|
||||
132
build/lib/generate-metadata.js
Normal file
132
build/lib/generate-metadata.js
Normal file
@@ -0,0 +1,132 @@
|
||||
'use strict'
|
||||
|
||||
const path = require('path')
|
||||
const CSON = require('season')
|
||||
const fs = require('fs-extra')
|
||||
const normalizePackageData = require('normalize-package-data')
|
||||
const semver = require('semver')
|
||||
|
||||
const CONFIG = require('../config')
|
||||
|
||||
module.exports = function () {
|
||||
console.log(`Generating metadata for ${path.join(CONFIG.intermediateAppPath, 'package.json')}...`)
|
||||
CONFIG.appMetadata._atomPackages = buildBundledPackagesMetadata()
|
||||
CONFIG.appMetadata._atomMenu = buildPlatformMenuMetadata()
|
||||
CONFIG.appMetadata._atomKeymaps = buildPlatformKeymapsMetadata()
|
||||
CONFIG.appMetadata._deprecatedPackages = buildDeprecatedPackagesMetadata()
|
||||
fs.writeFileSync(path.join(CONFIG.intermediateAppPath, 'package.json'), JSON.stringify(CONFIG.appMetadata))
|
||||
}
|
||||
|
||||
function buildBundledPackagesMetadata () {
|
||||
const packages = {}
|
||||
for (let packageName of Object.keys(CONFIG.appMetadata.packageDependencies)) {
|
||||
const packagePath = path.join(CONFIG.intermediateAppPath, 'node_modules', packageName)
|
||||
const packageMetadataPath = path.join(packagePath, 'package.json')
|
||||
const packageMetadata = JSON.parse(fs.readFileSync(packageMetadataPath, 'utf8'))
|
||||
normalizePackageData(packageMetadata, () => {
|
||||
throw new Error(`Invalid package metadata. ${metadata.name}: ${msg}`)
|
||||
}, true)
|
||||
if (packageMetadata.repository && packageMetadata.repository.url && packageMetadata.repository.type === 'git') {
|
||||
packageMetadata.repository.url = packageMetadata.repository.url.replace(/^git\+/, '')
|
||||
}
|
||||
|
||||
delete packageMetadata['_from']
|
||||
delete packageMetadata['_id']
|
||||
delete packageMetadata['dist']
|
||||
delete packageMetadata['readme']
|
||||
delete packageMetadata['readmeFilename']
|
||||
|
||||
const packageModuleCache = packageMetadata._atomModuleCache || {}
|
||||
if (packageModuleCache.extensions && packageModuleCache.extensions['.json']) {
|
||||
const index = packageModuleCache.extensions['.json'].indexOf('package.json')
|
||||
if (index !== -1) {
|
||||
packageModuleCache.extensions['.json'].splice(index, 1)
|
||||
}
|
||||
}
|
||||
|
||||
const packageNewMetadata = {metadata: packageMetadata, keymaps: {}, menus: {}}
|
||||
if (packageMetadata.main) {
|
||||
const mainPath = require.resolve(path.resolve(packagePath, packageMetadata.main))
|
||||
packageNewMetadata.main = path.relative(CONFIG.intermediateAppPath, mainPath)
|
||||
}
|
||||
|
||||
const packageKeymapsPath = path.join(packagePath, 'keymaps')
|
||||
if (fs.existsSync(packageKeymapsPath)) {
|
||||
for (let packageKeymapName of fs.readdirSync(packageKeymapsPath)) {
|
||||
const packageKeymapPath = path.join(packageKeymapsPath, packageKeymapName)
|
||||
if (packageKeymapPath.endsWith('.cson') || packageKeymapPath.endsWith('.json')) {
|
||||
const relativePath = path.relative(CONFIG.intermediateAppPath, packageKeymapPath)
|
||||
packageNewMetadata.keymaps[relativePath] = CSON.readFileSync(packageKeymapPath)
|
||||
fs.removeSync(packageKeymapPath)
|
||||
}
|
||||
}
|
||||
if (fs.readdirSync(packageKeymapsPath).length === 0) {
|
||||
fs.removeSync(packageKeymapsPath)
|
||||
}
|
||||
}
|
||||
|
||||
const packageMenusPath = path.join(packagePath, 'menus')
|
||||
if (fs.existsSync(packageMenusPath)) {
|
||||
for (let packageMenuName of fs.readdirSync(packageMenusPath)) {
|
||||
const packageMenuPath = path.join(packageMenusPath, packageMenuName)
|
||||
if (packageMenuPath.endsWith('.cson') || packageMenuPath.endsWith('.json')) {
|
||||
const relativePath = path.relative(CONFIG.intermediateAppPath, packageMenuPath)
|
||||
packageNewMetadata.menus[relativePath] = CSON.readFileSync(packageMenuPath)
|
||||
fs.removeSync(packageMenuPath)
|
||||
}
|
||||
}
|
||||
if (fs.readdirSync(packageMenusPath).length === 0) {
|
||||
fs.removeSync(packageMenusPath)
|
||||
}
|
||||
}
|
||||
|
||||
packages[packageMetadata.name] = packageNewMetadata
|
||||
if (packageModuleCache.extensions) {
|
||||
for (let extension of Object.keys(packageModuleCache.extensions)) {
|
||||
const paths = packageModuleCache.extensions[extension]
|
||||
if (paths.length === 0) {
|
||||
delete packageModuleCache.extensions[extension]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fs.removeSync(packageMetadataPath)
|
||||
}
|
||||
return packages
|
||||
}
|
||||
|
||||
function buildPlatformMenuMetadata () {
|
||||
const menuPath = path.join(CONFIG.repositoryRootPath, 'menus', `${process.platform}.cson`)
|
||||
if (fs.existsSync(menuPath)) {
|
||||
return CSON.readFileSync(menuPath)
|
||||
} else {
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
function buildPlatformKeymapsMetadata () {
|
||||
const invalidPlatforms = ['darwin', 'freebsd', 'linux', 'sunos', 'win32'].filter(p => p !== process.platform)
|
||||
const keymapsPath = path.join(CONFIG.repositoryRootPath, 'keymaps')
|
||||
const keymaps = {}
|
||||
for (let keymapName of fs.readdirSync(keymapsPath)) {
|
||||
const keymapPath = path.join(keymapsPath, keymapName)
|
||||
if (keymapPath.endsWith('.cson') || keymapPath.endsWith('.json')) {
|
||||
const keymapPlatform = path.basename(keymapPath, path.extname(keymapPath))
|
||||
if (invalidPlatforms.indexOf(keymapPlatform) === -1) {
|
||||
keymaps[path.basename(keymapPath)] = CSON.readFileSync(keymapPath)
|
||||
}
|
||||
}
|
||||
}
|
||||
return keymaps
|
||||
}
|
||||
|
||||
function buildDeprecatedPackagesMetadata () {
|
||||
const deprecatedPackagesMetadata = require('../deprecated-packages')
|
||||
for (let packageName of Object.keys(deprecatedPackagesMetadata)) {
|
||||
const packageMetadata = deprecatedPackagesMetadata[packageName]
|
||||
if (packageMetadata.version && !semver.validRange(packageMetadata.version)) {
|
||||
throw new Error(`Invalid range: ${version} (${name}).`)
|
||||
}
|
||||
}
|
||||
return deprecatedPackagesMetadata
|
||||
}
|
||||
@@ -16,9 +16,6 @@ module.exports = function () {
|
||||
|
||||
function getPathsToTranspile () {
|
||||
let paths = []
|
||||
paths = paths.concat(glob.sync(path.join(CONFIG.intermediateAppPath, 'menus', '*.cson')))
|
||||
paths = paths.concat(glob.sync(path.join(CONFIG.intermediateAppPath, 'keymaps', '*.cson')))
|
||||
paths = paths.concat(glob.sync(path.join(CONFIG.intermediateAppPath, 'static', '**', '*.cson')))
|
||||
for (let packageName of Object.keys(CONFIG.appMetadata.packageDependencies)) {
|
||||
paths = paths.concat(glob.sync(
|
||||
path.join(CONFIG.intermediateAppPath, 'node_modules', packageName, '**', '*.cson'),
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
"fs-extra": "0.30.0",
|
||||
"glob": "7.0.3",
|
||||
"mkdirp": "0.5.1",
|
||||
"normalize-package-data": "2.3.5",
|
||||
"npm": "3.10.5",
|
||||
"pegjs": "0.9.0"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user