pkg-struct.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. const path = require('path')
  2. const { existsSync } = require('fs')
  3. const { buildPkgJsonObj } = require('./pkg-json-obj')
  4. let pkgStructs = buildPkgStructs()
  5. let pkgStructHash = {}
  6. for (let pkgStruct of pkgStructs) {
  7. pkgStructHash[pkgStruct.name] = pkgStruct
  8. }
  9. exports.pkgStructs = pkgStructs
  10. exports.pkgStructHash = pkgStructHash
  11. exports.getCorePkgStruct = getCorePkgStruct
  12. exports.getNonPremiumBundle = getNonPremiumBundle
  13. function buildPkgStructs() {
  14. let tsConfig = require(path.join(process.cwd(), 'tsconfig.json'))
  15. let tsPaths = tsConfig.compilerOptions.paths
  16. let structs = []
  17. for (let entry in tsPaths) {
  18. let path = tsPaths[entry][0]
  19. if (path && path.match(/\/main$/)) {
  20. let struct = buildPkgStruct(entry, path)
  21. if (struct) {
  22. structs.push(struct)
  23. }
  24. }
  25. }
  26. return structs
  27. }
  28. function buildPkgStruct(pkgName, mainPath) {
  29. let isPremium = mainPath.indexOf('packages-premium/') !== -1
  30. let dir = path.dirname(path.dirname(mainPath))
  31. let shortName = path.basename(dir)
  32. let isCore = shortName === 'core'
  33. let isBundle = shortName === 'bundle'
  34. let jsonPath = path.join(process.cwd(), dir, 'package.json')
  35. if (existsSync(jsonPath)) {
  36. let origJsonObj = require(jsonPath) // not yet combined with more root-level json
  37. let srcDir = path.join(dir, 'src') // relative to project root
  38. let tscDir = path.join('tmp/tsc-output', srcDir)
  39. return {
  40. name: pkgName,
  41. shortName,
  42. isCore,
  43. isBundle,
  44. isPremium,
  45. dir, // relative to project root
  46. srcDir,
  47. tscDir, // TODO: use elsewhere!!!
  48. tscMain: path.join(tscDir, path.basename(mainPath)), // TODO: use elsewhere!!! TODO: make an absolute version
  49. jsonObj: buildPkgJsonObj(origJsonObj, isPremium, isBundle)
  50. }
  51. }
  52. }
  53. // TODO: stop making these funcs!!!
  54. function getCorePkgStruct() {
  55. for (let pkgStruct of pkgStructs) {
  56. if (pkgStruct.isCore) {
  57. return pkgStruct
  58. }
  59. }
  60. throw new Error('No core package')
  61. }
  62. function getNonPremiumBundle() {
  63. let matches = pkgStructs.filter(
  64. (pkgStruct) => pkgStruct.isBundle && !pkgStruct.isPremium
  65. )
  66. if (!matches.length) {
  67. throw new Error('No non-premium bundle')
  68. }
  69. return matches[0]
  70. }