@equinor/fusion-imports 1.1.8 → 1.2.0-next.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -78,4 +78,39 @@ our implementation does not use any plugins, but working with mono-repos you mos
78
78
 
79
79
  ### importJSON
80
80
 
81
- Method for loading json from disk. Will read content and parse.
81
+ Method for loading json from disk. Will read content and parse.
82
+
83
+ ### Plugins
84
+
85
+ The `importScript` function includes built-in plugins to handle common import scenarios:
86
+
87
+ #### createMarkdownRawPlugin
88
+
89
+ Creates an esbuild plugin that handles `?raw` imports for markdown files. This plugin is automatically included when using `importScript`, but can also be used independently.
90
+
91
+ ```ts
92
+ import { importScript, createMarkdownRawPlugin } from '@equinor/fusion-imports';
93
+
94
+ // The plugin is automatically included, but you can also add it explicitly
95
+ const module = await importScript('./my-script.ts', {
96
+ plugins: [createMarkdownRawPlugin()],
97
+ });
98
+ ```
99
+
100
+ **Usage in imported files:**
101
+
102
+ ```ts
103
+ // my-script.ts
104
+ import readmeContent from '../../README.md?raw';
105
+
106
+ export default readmeContent; // Returns the raw markdown content as a string
107
+ ```
108
+
109
+ The plugin:
110
+ - Intercepts imports ending with `?raw`
111
+ - Resolves paths relative to the importing file (handles `../` correctly)
112
+ - Reads the file content and exports it as a default string export
113
+
114
+ #### createImportMetaResolvePlugin
115
+
116
+ Creates an esbuild plugin that handles `import.meta.resolve()` calls. This plugin is automatically included when using `importScript`.
@@ -0,0 +1,149 @@
1
+ import path from 'node:path';
2
+ import { pathToFileURL } from 'node:url';
3
+ /**
4
+ * Transforms import.meta.resolve() calls in code to resolved file:// URLs
5
+ * @param code - The code to transform
6
+ * @param baseDir - The base directory for resolving relative paths
7
+ * @returns The transformed code
8
+ */
9
+ function transformImportMetaResolve(code, baseDir) {
10
+ return code.replace(/import\.meta\.resolve\((['"`])([^'"`]+)\1\)/g, (match, quote, specifier) => {
11
+ try {
12
+ // Only resolve relative paths (./ or ../), skip package imports
13
+ if (!specifier.startsWith('./') && !specifier.startsWith('../')) {
14
+ return match;
15
+ }
16
+ const resolvedPath = path.resolve(baseDir, specifier);
17
+ const fileUrl = pathToFileURL(resolvedPath).href;
18
+ return `${quote}${fileUrl}${quote}`;
19
+ }
20
+ catch {
21
+ // If resolution fails, leave it as-is
22
+ return match;
23
+ }
24
+ });
25
+ }
26
+ /**
27
+ * Gets the appropriate esbuild loader for a file extension
28
+ */
29
+ function getLoader(filePath) {
30
+ const ext = path.extname(filePath);
31
+ if (ext === '.tsx' || ext === '.jsx') {
32
+ return ext === '.tsx' ? 'tsx' : 'jsx';
33
+ }
34
+ if (ext === '.ts' || ext === '.mts') {
35
+ return 'ts';
36
+ }
37
+ if (ext === '.js' || ext === '.mjs') {
38
+ return 'js';
39
+ }
40
+ return undefined;
41
+ }
42
+ /**
43
+ * Safely reads a file, returning undefined on error
44
+ */
45
+ async function readFileSafe(filePath) {
46
+ try {
47
+ const fs = await import('node:fs/promises');
48
+ return await fs.readFile(filePath, 'utf-8');
49
+ }
50
+ catch {
51
+ return undefined;
52
+ }
53
+ }
54
+ /**
55
+ * Collects output files from esbuild result (handles both write: true and write: false)
56
+ */
57
+ async function collectOutputFiles(result) {
58
+ const files = [];
59
+ const processedPaths = new Set();
60
+ // Collect from outputFiles (write: false case - files in memory)
61
+ if (result.outputFiles) {
62
+ for (const outputFile of result.outputFiles) {
63
+ if (outputFile.path.endsWith('.js') || outputFile.path.endsWith('.mjs')) {
64
+ files.push({ path: outputFile.path, text: outputFile.text });
65
+ processedPaths.add(outputFile.path);
66
+ }
67
+ }
68
+ }
69
+ // Collect from metafile (write: true case - files on disk)
70
+ if (result.metafile?.outputs) {
71
+ for (const outputPath of Object.keys(result.metafile.outputs)) {
72
+ if (processedPaths.has(outputPath)) {
73
+ continue;
74
+ }
75
+ if (outputPath.endsWith('.js') || outputPath.endsWith('.mjs')) {
76
+ const absolutePath = path.isAbsolute(outputPath)
77
+ ? outputPath
78
+ : path.resolve(process.cwd(), outputPath);
79
+ const text = (await readFileSafe(absolutePath)) ?? (await readFileSafe(outputPath));
80
+ if (text) {
81
+ files.push({ path: absolutePath, text });
82
+ }
83
+ }
84
+ }
85
+ }
86
+ return files;
87
+ }
88
+ /**
89
+ * Creates an esbuild plugin that transforms `import.meta.resolve()` calls
90
+ * to resolved file:// URLs at build time.
91
+ *
92
+ * This plugin is necessary because esbuild doesn't handle `import.meta.resolve()`
93
+ * calls during bundling - it leaves them as runtime calls. For local imports
94
+ * (relative paths), we need to resolve them at build time so they work correctly
95
+ * in the bundled output.
96
+ */
97
+ export const importMetaResolvePlugin = () => {
98
+ return {
99
+ name: 'import-meta-resolve',
100
+ setup(build) {
101
+ let entryPointDir;
102
+ // Transform source files during load phase
103
+ build.onLoad({ filter: /.*/ }, async (args) => {
104
+ // Track entry point directory (first non-node_modules file)
105
+ if (args.namespace === 'file' && !entryPointDir && !args.path.includes('node_modules')) {
106
+ entryPointDir = path.dirname(args.path);
107
+ }
108
+ // Skip node_modules
109
+ if (args.path.includes('node_modules')) {
110
+ return undefined;
111
+ }
112
+ // Read and transform file if it contains import.meta.resolve
113
+ const contents = await readFileSafe(args.path);
114
+ if (!contents || !contents.includes('import.meta.resolve')) {
115
+ return undefined;
116
+ }
117
+ const transformedContents = transformImportMetaResolve(contents, path.dirname(args.path));
118
+ if (transformedContents === contents) {
119
+ return undefined;
120
+ }
121
+ const loader = getLoader(args.path);
122
+ return loader ? { contents: transformedContents, loader } : undefined;
123
+ });
124
+ // Transform bundled output files
125
+ build.onEnd(async (result) => {
126
+ if (!entryPointDir) {
127
+ return;
128
+ }
129
+ const files = await collectOutputFiles(result);
130
+ const fs = await import('node:fs/promises');
131
+ for (const file of files) {
132
+ if (!file.text.includes('import.meta.resolve')) {
133
+ continue;
134
+ }
135
+ const transformedText = transformImportMetaResolve(file.text, entryPointDir);
136
+ if (transformedText !== file.text) {
137
+ try {
138
+ await fs.writeFile(file.path, transformedText, 'utf-8');
139
+ }
140
+ catch (error) {
141
+ console.warn(`Failed to write transformed output to ${file.path}:`, error);
142
+ }
143
+ }
144
+ }
145
+ });
146
+ },
147
+ };
148
+ };
149
+ //# sourceMappingURL=import-meta-resolve-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"import-meta-resolve-plugin.js","sourceRoot":"","sources":["../../src/import-meta-resolve-plugin.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@ import path from 'node:path';
4
4
  import { pathToFileURL } from 'node:url';
5
5
  import { processAccessError } from './error.js';
6
6
  import { readPackageUp } from 'read-package-up';
7
+ import { importMetaResolvePlugin } from './import-meta-resolve-plugin.js';
8
+ import { rawMarkdownPlugin } from './markdown-plugin.js';
7
9
  /**
8
10
  * Asynchronously imports a script file using esbuild to bundle it.
9
11
  *
@@ -40,6 +42,9 @@ export const importScript = async (entryPoint, options) => {
40
42
  outfile,
41
43
  platform: 'node',
42
44
  write: true,
45
+ plugins: [importMetaResolvePlugin(), rawMarkdownPlugin()],
46
+ // Enable metafile so the plugin can find output files when write: true
47
+ metafile: true,
43
48
  }, options, // provided options
44
49
  {
45
50
  // non-overridable options
@@ -48,6 +53,9 @@ export const importScript = async (entryPoint, options) => {
48
53
  bundle: true,
49
54
  packages: 'external',
50
55
  format: 'esm',
56
+ // Override plugins to ensure import-meta-resolve is included
57
+ // Ensure metafile is enabled for the plugin to work with write: true
58
+ metafile: options?.metafile ?? true,
51
59
  });
52
60
  const result = await build(buildOptions);
53
61
  if (!buildOptions.write) {
@@ -1 +1 @@
1
- {"version":3,"file":"import-script.js","sourceRoot":"","sources":["../../src/import-script.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAqB,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAyBhD;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,UAAkB,EAClB,OAA6B,EACjB,EAAE;IACd,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAE5C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,kBAAkB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,gBAAgB,GAAG,MAAM,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAC1D,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAC9C,CAAC;IAEF,MAAM,OAAO,GACX,OAAO,EAAE,OAAO;QAChB,IAAI,CAAC,IAAI,CACP,gBAAgB,EAChB,6BAA6B,EAC7B,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAC1C,CAAC;IAEJ,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAChC;YACE,kBAAkB;YAClB,OAAO;YACP,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,IAAI;SACZ,EACD,OAAO,EAAE,mBAAmB;QAC5B;YACE,0BAA0B;YAC1B,MAAM,EAAE,SAAS;YACjB,WAAW,EAAE,CAAC,UAAU,CAAC;YACzB,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,UAAU;YACpB,MAAM,EAAE,KAAK;SACd,CACc,CAAC;QAElB,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;QAEzC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YACxB,gEAAgE;YAChE,qDAAqD;YACrD,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC;YAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,kCAAkC,UAAU,GAAG,CAAC,CAAC;YACnE,CAAC;YAED,4CAA4C;YAC5C,MAAM,OAAO,GAAG,+BAA+B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7F,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QAED,+FAA+F;QAC/F,OAAO,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,qBAAqB,UAAU,gEAAgE,EAC/F,EAAE,KAAK,EAAE,KAAK,EAAE,CACjB,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"import-script.js","sourceRoot":"","sources":["../../src/import-script.ts"],"names":[],"mappings":"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"}
package/dist/esm/index.js CHANGED
@@ -2,5 +2,7 @@ export { importScript } from './import-script.js';
2
2
  export { importJSON } from './import-json.js';
3
3
  export { default, importConfig, } from './import-config.js';
4
4
  export { resolveConfigFile } from './resolve-config-file.js';
5
+ export { importMetaResolvePlugin as createImportMetaResolvePlugin } from './import-meta-resolve-plugin.js';
6
+ export { rawMarkdownPlugin } from './markdown-plugin.js';
5
7
  export { FileNotFoundError, FileNotAccessibleError } from './error.js';
6
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,OAAO,EACP,YAAY,GAGb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EACL,OAAO,EACP,YAAY,GAGb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,uBAAuB,IAAI,6BAA6B,EAAE,MAAM,iCAAiC,CAAC;AAC3G,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,63 @@
1
+ import path from 'node:path';
2
+ import { readFile } from 'node:fs/promises';
3
+ /**
4
+ * Creates an esbuild plugin that handles `?raw` imports for markdown files.
5
+ *
6
+ * This plugin allows importing markdown files as raw strings using the `?raw` query parameter:
7
+ * ```typescript
8
+ * import readmeContent from '../../README.md?raw';
9
+ * import mdxContent from '../../docs/guide.mdx?raw';
10
+ * ```
11
+ *
12
+ * The plugin intercepts imports ending with `?raw` (or `.md?raw`/`.mdx?raw`), reads the file content,
13
+ * and returns it as a default export string.
14
+ *
15
+ * @param options - Configuration options for the plugin
16
+ * @returns An esbuild plugin
17
+ */
18
+ export const rawMarkdownPlugin = (options = {}) => {
19
+ const { filter = /\.mdx?\?raw$/ } = options;
20
+ return {
21
+ name: 'markdown-raw',
22
+ setup(build) {
23
+ // Handle imports ending with ?raw
24
+ build.onResolve({ filter }, (args) => {
25
+ // Remove the ?raw suffix to get the actual file path
26
+ const filePath = args.path.replace(/\?raw$/, '');
27
+ // Determine the resolve directory: use importer's directory if available, otherwise use resolveDir
28
+ const resolveDir = args.importer
29
+ ? path.dirname(args.importer)
30
+ : args.resolveDir || process.cwd();
31
+ const resolvedPath = path.isAbsolute(filePath)
32
+ ? filePath
33
+ : path.resolve(resolveDir, filePath);
34
+ return {
35
+ path: resolvedPath,
36
+ namespace: 'markdown-raw',
37
+ };
38
+ });
39
+ // Load the file content as a string
40
+ build.onLoad({ filter: /.*/, namespace: 'markdown-raw' }, async (args) => {
41
+ try {
42
+ const content = await readFile(args.path, 'utf-8');
43
+ // Export the content as a default export string
44
+ return {
45
+ contents: `export default ${JSON.stringify(content)};`,
46
+ loader: 'js',
47
+ };
48
+ }
49
+ catch (error) {
50
+ return {
51
+ errors: [
52
+ {
53
+ text: `Failed to read file: ${args.path}`,
54
+ detail: error instanceof Error ? error.message : String(error),
55
+ },
56
+ ],
57
+ };
58
+ }
59
+ });
60
+ },
61
+ };
62
+ };
63
+ //# sourceMappingURL=markdown-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-plugin.js","sourceRoot":"","sources":["../../src/markdown-plugin.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAa5C;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,UAAoC,EAAE,EAAU,EAAE;IAClF,MAAM,EAAE,MAAM,GAAG,cAAc,EAAE,GAAG,OAAO,CAAC;IAE5C,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,KAAK,CAAC,KAAK;YACT,kCAAkC;YAClC,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE;gBACnC,qDAAqD;gBACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAEjD,mGAAmG;gBACnG,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ;oBAC9B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;oBAC7B,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBAErC,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;oBAC5C,CAAC,CAAC,QAAQ;oBACV,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBAEvC,OAAO;oBACL,IAAI,EAAE,YAAY;oBAClB,SAAS,EAAE,cAAc;iBAC1B,CAAC;YACJ,CAAC,CAAC,CAAC;YAEH,oCAAoC;YACpC,KAAK,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBACvE,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;oBACnD,gDAAgD;oBAChD,OAAO;wBACL,QAAQ,EAAE,kBAAkB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG;wBACtD,MAAM,EAAE,IAAI;qBACb,CAAC;gBACJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO;wBACL,MAAM,EAAE;4BACN;gCACE,IAAI,EAAE,wBAAwB,IAAI,CAAC,IAAI,EAAE;gCACzC,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;6BAC/D;yBACF;qBACF,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC,CAAC"}
@@ -1,3 +1,3 @@
1
1
  // Generated by genversion.
2
- export const version = '1.1.8';
2
+ export const version = '1.2.0-next.0';
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/version.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAC3B,MAAM,CAAC,MAAM,OAAO,GAAG,cAAc,CAAC"}