pkg-struct.js 2.1 KB

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