| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -53,7 +53,7 @@ function resolve(specifier, parentURL) { | |||
| 53 | 53 | try { | |
| 54 | 54 | const parsed = new URL(specifier); | |
| 55 | 55 | if (parsed.protocol === 'data:') { | |
| 56 | - const [ , mime ] = /^([^/]+\/[^;,]+)(;base64)?,/.exec(parsed.pathname) || [ null, null, null ]; | ||
| 56 | + const [ , mime ] = /^([^/]+\/[^;,]+)(?:[^,]*?)(;base64)?,/.exec(parsed.pathname) || [ null, null, null ]; | ||
| 57 | 57 | const format = ({ | |
| 58 | 58 | '__proto__': null, | |
| 59 | 59 | 'text/javascript': 'module', | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -39,7 +39,7 @@ const debug = debuglog('esm'); | |||
| 39 | 39 | const translators = new SafeMap(); | |
| 40 | 40 | exports.translators = translators; | |
| 41 | 41 | ||
| 42 | - const DATA_URL_PATTERN = /^[^/]+\/[^,;]+(;base64)?,([\s\S]*)$/; | ||
| 42 | + const DATA_URL_PATTERN = /^[^/]+\/[^,;]+(?:[^,]*?)(;base64)?,([\s\S]*)$/; | ||
| 43 | 43 | function getSource(url) { | |
| 44 | 44 | const parsed = new URL(url); | |
| 45 | 45 | if (parsed.protocol === 'file:') { | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -37,6 +37,47 @@ function createBase64URL(mime, body) { | |||
| 37 | 37 | assert.deepStrictEqual(Object.keys(ns), ['default']); | |
| 38 | 38 | assert.deepStrictEqual(ns.default, plainESMURL); | |
| 39 | 39 | } | |
| 40 | + { | ||
| 41 | + const body = 'export default import.meta.url;'; | ||
| 42 | + const plainESMURL = createURL('text/javascript;charset=UTF-8', body); | ||
| 43 | + const ns = await import(plainESMURL); | ||
| 44 | + assert.deepStrictEqual(Object.keys(ns), ['default']); | ||
| 45 | + assert.deepStrictEqual(ns.default, plainESMURL); | ||
| 46 | + } | ||
| 47 | + { | ||
| 48 | + const body = 'export default import.meta.url;'; | ||
| 49 | + const plainESMURL = createURL('text/javascript;charset="UTF-8"', body); | ||
| 50 | + const ns = await import(plainESMURL); | ||
| 51 | + assert.deepStrictEqual(Object.keys(ns), ['default']); | ||
| 52 | + assert.deepStrictEqual(ns.default, plainESMURL); | ||
| 53 | + } | ||
| 54 | + { | ||
| 55 | + const body = 'export default import.meta.url;'; | ||
| 56 | + const plainESMURL = createURL('text/javascript;;a=a;b=b;;', body); | ||
| 57 | + const ns = await import(plainESMURL); | ||
| 58 | + assert.deepStrictEqual(Object.keys(ns), ['default']); | ||
| 59 | + assert.deepStrictEqual(ns.default, plainESMURL); | ||
| 60 | + } | ||
| 61 | + { | ||
| 62 | + const ns = await import('data:application/json;foo="test,"this"'); | ||
| 63 | + assert.deepStrictEqual(Object.keys(ns), ['default']); | ||
| 64 | + assert.deepStrictEqual(ns.default, 'this'); | ||
| 65 | + } | ||
| 66 | + { | ||
| 67 | + const ns = await import(`data:application/json;foo=${ | ||
| 68 | + encodeURIComponent('test,') | ||
| 69 | + },0`); | ||
| 70 | + assert.deepStrictEqual(Object.keys(ns), ['default']); | ||
| 71 | + assert.deepStrictEqual(ns.default, 0); | ||
| 72 | + } | ||
| 73 | + { | ||
| 74 | + await assert.rejects(async () => { | ||
| 75 | + return import('data:application/json;foo="test,",0'); | ||
| 76 | + }, { | ||
| 77 | + name: 'SyntaxError', | ||
| 78 | + message: /Unexpected end of JSON input/ | ||
| 79 | + }); | ||
| 80 | + } | ||
| 40 | 81 | { | |
| 41 | 82 | const body = '{"x": 1}'; | |
| 42 | 83 | const plainESMURL = createURL('application/json', body); | |
| Back | FazBrowse Home | New Git URL |
0 commit comments