1+ "use strict" ;
2+ Object . defineProperty ( exports , "__esModule" , { value : true } ) ;
3+ exports . loadPackageJson = exports . findPackageJson = void 0 ;
4+ const node_fs_1 = require ( "node:fs" ) ;
5+ const node_path_1 = require ( "node:path" ) ;
6+ const node_url_1 = require ( "node:url" ) ;
7+ const NM = `${ node_path_1 . sep } node_modules${ node_path_1 . sep } ` ;
8+ const DIST = `${ node_path_1 . sep } dist${ node_path_1 . sep } ` ;
9+ /**
10+ * Find the package.json file, either from a TypeScript file somewhere not
11+ * in a 'dist' folder, or a built and/or installed 'dist' folder.
12+ *
13+ * Note: this *only* works if you build your code into `'./dist'`, and that the
14+ * source path does not also contain `'dist'`! If you don't build into
15+ * `'./dist'`, or if you have files at `./src/dist/dist.ts`, then this will
16+ * not work properly!
17+ *
18+ * The default `pathFromSrc` option assumes that the calling code lives one
19+ * folder below the root of the package. Otherwise, it must be specified.
20+ *
21+ * Example:
22+ *
23+ * ```ts
24+ * // src/index.ts
25+ * import { findPackageJson } from 'package-json-from-dist'
26+ *
27+ * const pj = findPackageJson(import.meta.url)
28+ * console.log(`package.json found at ${pj}`)
29+ * ```
30+ *
31+ * If the caller is deeper within the project source, then you must provide
32+ * the appropriate fallback path:
33+ *
34+ * ```ts
35+ * // src/components/something.ts
36+ * import { findPackageJson } from 'package-json-from-dist'
37+ *
38+ * const pj = findPackageJson(import.meta.url, '../../package.json')
39+ * console.log(`package.json found at ${pj}`)
40+ * ```
41+ *
42+ * When running from CommmonJS, use `__filename` instead of `import.meta.url`
43+ *
44+ * ```ts
45+ * // src/index.cts
46+ * import { findPackageJson } from 'package-json-from-dist'
47+ *
48+ * const pj = findPackageJson(__filename)
49+ * console.log(`package.json found at ${pj}`)
50+ * ```
51+ */
52+ const findPackageJson = ( from , pathFromSrc = '../package.json' ) => {
53+ const f = typeof from === 'object' || from . startsWith ( 'file://' ) ?
54+ ( 0 , node_url_1 . fileURLToPath ) ( from )
55+ : from ;
56+ const __dirname = ( 0 , node_path_1 . dirname ) ( f ) ;
57+ const nms = __dirname . lastIndexOf ( NM ) ;
58+ if ( nms !== - 1 ) {
59+ // inside of node_modules. find the dist directly under package name.
60+ const nm = __dirname . substring ( 0 , nms + NM . length ) ;
61+ const pkgDir = __dirname . substring ( nms + NM . length ) ;
62+ const pkgName = pkgDir . startsWith ( '@' ) ?
63+ pkgDir . split ( node_path_1 . sep ) . slice ( 0 , 2 ) . join ( node_path_1 . sep )
64+ : String ( pkgDir . split ( node_path_1 . sep ) [ 0 ] ) ;
65+ return ( 0 , node_path_1 . resolve ) ( nm , pkgName , 'package.json' ) ;
66+ }
67+ else {
68+ // see if we are in a dist folder.
69+ const d = __dirname . lastIndexOf ( DIST ) ;
70+ if ( d !== - 1 ) {
71+ return ( 0 , node_path_1 . resolve ) ( __dirname . substring ( 0 , d ) , 'package.json' ) ;
72+ }
73+ else {
74+ return ( 0 , node_path_1 . resolve ) ( __dirname , pathFromSrc ) ;
75+ }
76+ }
77+ } ;
78+ exports . findPackageJson = findPackageJson ;
79+ /**
80+ * Load the package.json file, either from a TypeScript file somewhere not
81+ * in a 'dist' folder, or a built and/or installed 'dist' folder.
82+ *
83+ * Note: this *only* works if you build your code into `'./dist'`, and that the
84+ * source path does not also contain `'dist'`! If you don't build into
85+ * `'./dist'`, or if you have files at `./src/dist/dist.ts`, then this will
86+ * not work properly!
87+ *
88+ * The default `pathFromSrc` option assumes that the calling code lives one
89+ * folder below the root of the package. Otherwise, it must be specified.
90+ *
91+ * Example:
92+ *
93+ * ```ts
94+ * // src/index.ts
95+ * import { loadPackageJson } from 'package-json-from-dist'
96+ *
97+ * const pj = loadPackageJson(import.meta.url)
98+ * console.log(`Hello from ${pj.name}@${pj.version}`)
99+ * ```
100+ *
101+ * If the caller is deeper within the project source, then you must provide
102+ * the appropriate fallback path:
103+ *
104+ * ```ts
105+ * // src/components/something.ts
106+ * import { loadPackageJson } from 'package-json-from-dist'
107+ *
108+ * const pj = loadPackageJson(import.meta.url, '../../package.json')
109+ * console.log(`Hello from ${pj.name}@${pj.version}`)
110+ * ```
111+ *
112+ * When running from CommmonJS, use `__filename` instead of `import.meta.url`
113+ *
114+ * ```ts
115+ * // src/index.cts
116+ * import { loadPackageJson } from 'package-json-from-dist'
117+ *
118+ * const pj = loadPackageJson(__filename)
119+ * console.log(`Hello from ${pj.name}@${pj.version}`)
120+ * ```
121+ */
122+ const loadPackageJson = ( from , pathFromSrc = '../package.json' ) => JSON . parse ( ( 0 , node_fs_1 . readFileSync ) ( ( 0 , exports . findPackageJson ) ( from , pathFromSrc ) , 'utf8' ) ) ;
123+ exports . loadPackageJson = loadPackageJson ;
124+ //# sourceMappingURL=index.js.map
0 commit comments