Skip to content

Commit

Permalink
fix: registry scripts bundling with scriptOptions.bundle
Browse files Browse the repository at this point in the history
Fixes #192
  • Loading branch information
harlan-zw committed Aug 7, 2024
1 parent 328d92a commit 0c7906e
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 1 deletion.
20 changes: 20 additions & 0 deletions playground/pages/features/bundle.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<script lang="ts" setup>
import { useScriptNpm } from '#imports'
useScriptNpm({
packageName: 'pannellum',
file: 'build/pannellum.js',
version: '2.5.6',
scriptOptions: {
bundle: true,
use() {
// @ts-expect-error un augmented
return { pannellum: window.pannellum }
},
},
})
</script>

<template>
<div>bundle test</div>
</template>
11 changes: 10 additions & 1 deletion src/plugins/transform.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,8 @@ export function NuxtScriptBundleTransformer(options: AssetBundlerTransformerOpti
if (scriptSrcNode || src) {
src = src || (typeof scriptSrcNode?.value === 'string' ? scriptSrcNode?.value : false)
if (src) {
let canBundle = options.defaultBundle
let canBundle = !!options.defaultBundle
// useScript
if (node.arguments[1]?.type === 'ObjectExpression') {
const scriptOptionsArg = node.arguments[1] as ObjectExpression & { start: number, end: number }
// second node needs to be an object with an property of assetStrategy and a value of 'bundle'
Expand All @@ -126,6 +127,14 @@ export function NuxtScriptBundleTransformer(options: AssetBundlerTransformerOpti
canBundle = true
}
}
const scriptOptions = node.arguments[0].properties.find(

Check failure on line 130 in src/plugins/transform.ts

View workflow job for this annotation

GitHub Actions / ci

test/e2e/basic.test.ts

TypeError: [nuxt:scripts:bundler-transformer] Cannot read properties of undefined (reading 'find') file: /home/runner/work/scripts/scripts/test/fixtures/basic/pages/mouseover-trigger.vue?macro=true&vue&type=script&setup=true&lang.ts ❯ Object.enter src/plugins/transform.ts:130:70 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:65:20 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:107:18 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:100:27 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:100:27 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:107:18 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:107:18 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:100:27 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:100:27 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:107:18 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:100:27 ❯ walk node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/index.js:20:19 ❯ Object.transform src/plugins/transform.ts:33:32 ❯ Object.plugin.transform node_modules/.pnpm/unplugin@1.12.0/node_modules/unplugin/dist/index.js:1537:25 ❯ node_modules/.pnpm/rollup@4.20.0/node_modules/rollup/dist/es/shared/node-entry.js:19892:40 ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ Serialized Error: { code: 'PLUGIN_ERROR', plugin: 'nuxt:scripts:bundler-transformer', hook: 'transform', id: '/home/runner/work/scripts/scripts/test/fixtures/basic/pages/mouseover-trigger.vue?macro=true&vue&type=script&setup=true&lang.ts', watchFiles: [ '/home/runner/work/scripts/scripts/node_modules/.pnpm/nuxt@3.12.4_@parcel+watcher@2.4.1_@types+node@22.1.0_eslint@9.8.0_ioredis@5.4.1_magicast@0.3._cyh33zqpungshq5uz3u2gcyue4/node_modules/nuxt/dist/app/entry.js', 'package.json', '/home/runner/work/scripts/scripts/node_modules/.pnpm/vue@3.4.35_typescript@5.5.4/node_modules/vue/dist/vue.runtime.esm-bundler.js', '/home/runner/work/scripts/scripts/node_modules/.pnpm/nuxt@3.12.4_@parcel+watcher@2.4.1_@types+node@22.1.0_eslint@9.8.0_ioredis@5.4.1_magicast@0.3._cyh33zqpungshq5uz3u2gcyue4/node_modules/nuxt/dist/app/nuxt.js', '/home/runner/work/scripts/scripts/node_modules/.pnpm/nuxt@3.12.4_@parcel+watcher@2.4.1_@types+node@22.1.0_eslint@9.8.0_ioredis@5.4.1_magicast@0.3._cyh33zqpungshq5uz3u2gcyue4/node_modules/nuxt/dist/app/composables/error.js', '/home/runner/work/scripts/scripts/node_modules/.pnpm/ofetch@1.3.4/node_modules/ofetch/dist/index.mjs', '/home/runner/work/scripts/scripts/node_modules/.pnpm/nuxt@3.12.4_@parcel+watcher@2.4.1_@types+node@22.1.0_eslint@9.8.0_ioredis@5.4.1_magicast@0.3._cyh33zqpungshq5uz3u2gcyue4/node_modules/nuxt/dist/app/plugins/revive-payload.client.js', '/home/runner/work/scripts/scripts/node_modules/.pnpm/nuxt@3.12.4_@parcel+watcher@2.4.1_@types+node@22.1.0_eslint@9.8.0_ioredis@5.4.1_magicast@0.3._cyh33zqpungshq5uz3u2gcyue4/node_modules/nuxt/dist/head/runtime/plugins/unhead.js', '/home/runner/work/scripts/scripts/node_modules/.pnpm/nuxt@3.12.4_@parcel+watcher@2.4.1_@types+node@22.1.0_eslint@9.8.0_ioredis@5.4.1_magicast@0.3._cyh33zqpungshq5uz3u2gcyue4/node_modules/nuxt/dist/pages/runtime/plugins/router.js', '/home/runner/work/scripts/scripts/node_modules/.pnpm/nuxt@3.12.4_@parcel+watcher@2.4.1_@types+node@22.1.0_eslint@9.8.0_ioredis@5.4.1_magicast@0.3._cyh33zqpungshq5uz3u2gcyue4/node_modules/nuxt/dist/app/plugins/payload.client.js', '/home/runner/work/scripts/scripts/node_modules/.pnpm/nuxt@3.12.4_@parcel+watcher@2.4.1_@types+node@22.1.0_eslint@9.8.0_ioredis@5.4.1_magicast@0.3._cyh33zqpungshq5uz3u2gcyue4/node_modules/nuxt/dist/app/plugins/navigation-repaint.client.js', '/home/runner/work/scripts/scripts/node_modules/.pnpm/nuxt@3.1

Check failure on line 130 in src/plugins/transform.ts

View workflow job for this annotation

GitHub Actions / ci

test/unit/transform.test.ts > nuxtScriptTransformer > string arg

TypeError: Cannot read properties of undefined (reading 'find') ❯ Object.enter src/plugins/transform.ts:130:70 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:65:16 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:107:12 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:100:19 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:100:19 ❯ Module.walk node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/index.js:20:18 ❯ Object.transform src/plugins/transform.ts:33:9 ❯ Object.plugin.transform node_modules/.pnpm/unplugin@1.12.0/node_modules/unplugin/dist/index.mjs:1501:25 ❯ transform test/unit/transform.test.ts:12:38 ❯ test/unit/transform.test.ts:22:24

Check failure on line 130 in src/plugins/transform.ts

View workflow job for this annotation

GitHub Actions / ci

test/unit/transform.test.ts > nuxtScriptTransformer > useScript broken #1

TypeError: Cannot read properties of undefined (reading 'find') ❯ Object.enter src/plugins/transform.ts:130:70 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:65:16 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:107:12 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:100:19 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:100:19 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:107:12 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:107:12 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:100:19 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:100:19 ❯ SyncWalker.visit node_modules/.pnpm/estree-walker@3.0.3/node_modules/estree-walker/src/sync.js:107:12
(p: any) => (p.key?.name === 'scriptOptions'),
) as Property | undefined
// we need to check if scriptOptions contains bundle: true, if it exists
const bundleOption = scriptOptions?.value.properties.find((prop) => {
return prop.type === 'Property' && prop.key?.name === 'bundle' && prop.value.type === 'Literal'
})
canBundle = bundleOption ? bundleOption.value.value : canBundle
if (canBundle) {
const newSrc = options.resolveScript(src)
if (src === newSrc) {
Expand Down

0 comments on commit 0c7906e

Please sign in to comment.