pkg-struct.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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 distDir = path.join(dir, 'dist') // relative to project root
  39. let tscDir = path.join('tmp/tsc-output', srcDir)
  40. return {
  41. name: pkgName,
  42. shortName,
  43. isCore,
  44. isBundle,
  45. isPremium,
  46. dir, // relative to project root
  47. srcDir,
  48. tscDir, // TODO: use elsewhere!!!
  49. tscMain: path.join(tscDir, path.basename(mainPath)), // TODO: use elsewhere!!! TODO: make an absolute version
  50. distDir,
  51. jsonObj: buildPkgJsonObj(origJsonObj, isPremium, isBundle)
  52. }
  53. }
  54. }
  55. // TODO: stop making these funcs!!!
  56. function getCorePkgStruct() {
  57. for (let pkgStruct of pkgStructs) {
  58. if (pkgStruct.isCore) {
  59. return pkgStruct
  60. }
  61. }
  62. throw new Error('No core package')
  63. }
  64. function getNonPremiumBundle() {
  65. let matches = pkgStructs.filter(
  66. (pkgStruct) => pkgStruct.isBundle && !pkgStruct.isPremium
  67. )
  68. if (!matches.length) {
  69. throw new Error('No non-premium bundle')
  70. }
  71. return matches[0]
  72. }