@quilted/rollup 0.2.10 → 0.2.12

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @quilted/rollup
2
2
 
3
+ ## 0.2.12
4
+
5
+ ### Patch Changes
6
+
7
+ - [`c680fb6c`](https://github.com/lemonmade/quilt/commit/c680fb6cf997358892d1aac9189e561159067f8c) Thanks [@lemonmade](https://github.com/lemonmade)! - Output workers as ESModules when supported
8
+
9
+ ## 0.2.11
10
+
11
+ ### Patch Changes
12
+
13
+ - [`ceb1549f`](https://github.com/lemonmade/quilt/commit/ceb1549f81d7ab451cfacca53c6d6d9664e72e42) Thanks [@lemonmade](https://github.com/lemonmade)! - More development worker tweaks
14
+
3
15
  ## 0.2.10
4
16
 
5
17
  ### Patch Changes
package/build/esm/app.mjs CHANGED
@@ -6,7 +6,7 @@ import { resolveEnvOption } from './features/env.mjs';
6
6
  import { multiline } from './shared/strings.mjs';
7
7
  import { getNodePlugins, removeBuildFiles, normalizeRollupInput } from './shared/rollup.mjs';
8
8
  import { createMagicModulePlugin } from './shared/magic-module.mjs';
9
- import { getBrowserGroups, getBrowserGroupTargetDetails, targetsSupportModules, rollupGenerateOptionsForBrowsers, getBrowserGroupRegularExpressions } from './shared/browserslist.mjs';
9
+ import { getBrowserGroups, getBrowserGroupTargetDetails, targetsSupportModules, rollupGenerateOptionsForBrowsers, targetsSupportModuleWebWorkers, getBrowserGroupRegularExpressions } from './shared/browserslist.mjs';
10
10
  import { Project } from './shared/project.mjs';
11
11
 
12
12
  const require = createRequire(import.meta.url);
@@ -121,7 +121,8 @@ async function quiltAppBrowser({
121
121
  { systemJS },
122
122
  { workers },
123
123
  { esnext },
124
- nodePlugins
124
+ nodePlugins,
125
+ supportsModuleWorkers
125
126
  ] = await Promise.all([
126
127
  import('rollup-plugin-visualizer'),
127
128
  import('./features/env.mjs'),
@@ -135,7 +136,8 @@ async function quiltAppBrowser({
135
136
  import('./features/system-js.mjs'),
136
137
  import('./features/workers.mjs'),
137
138
  import('./features/esnext.mjs'),
138
- getNodePlugins({ bundle: true })
139
+ getNodePlugins({ bundle: true }),
140
+ targetsSupportModuleWebWorkers(browserGroup.browsers)
139
141
  ]);
140
142
  const plugins = [
141
143
  quiltAppBrowserInput({ root: project.root, entry }),
@@ -181,9 +183,8 @@ async function quiltAppBrowser({
181
183
  }),
182
184
  workers({
183
185
  baseURL,
186
+ format: supportsModuleWorkers ? "module" : "classic",
184
187
  outputOptions: {
185
- format: "iife",
186
- inlineDynamicImports: true,
187
188
  dir: project.resolve(`build/assets`),
188
189
  entryFileNames: `[name]${targetFilenamePart}.[hash].js`,
189
190
  assetFileNames: `[name]${targetFilenamePart}.[hash].[ext]`,
@@ -7,6 +7,7 @@ const PREFIX = "\0quilt-worker:";
7
7
  const ENTRY_PREFIX = "\0quilt-worker-entry:";
8
8
  const MAGIC_MODULE_WORKER = "quilt:module/worker.js";
9
9
  function workers({
10
+ format = "classic",
10
11
  write = false,
11
12
  baseURL,
12
13
  plugins = defaultPlugins,
@@ -54,8 +55,8 @@ function workers({
54
55
  };
55
56
  const workerInputOptions = typeof inputOptions === "function" ? await inputOptions(baseInputOptions, context) : baseInputOptions;
56
57
  const baseOutputOptions = {
57
- format: "iife",
58
- inlineDynamicImports: true,
58
+ format: format === "classic" ? "iife" : "esm",
59
+ inlineDynamicImports: format === "classic",
59
60
  dir: "workers",
60
61
  entryFileNames: `[name].[hash].js`,
61
62
  assetFileNames: `[name].[hash].[ext]`,
@@ -77,9 +78,9 @@ function workers({
77
78
  this.addWatchFile(module2);
78
79
  }
79
80
  const filename = firstChunk.fileName;
80
- let resolvedBaseURL = filename;
81
+ let resolvedURL = filename;
81
82
  if (typeof baseURL === "string") {
82
- resolvedBaseURL = posix.join(baseURL, filename);
83
+ resolvedURL = posix.join(baseURL, filename);
83
84
  } else if (typeof baseURL === "function") {
84
85
  const returnedBaseURL = await baseURL({
85
86
  ...context,
@@ -88,10 +89,13 @@ function workers({
88
89
  outputOptions: workerOutputOptions
89
90
  });
90
91
  if (returnedBaseURL) {
91
- resolvedBaseURL = posix.join(returnedBaseURL, filename);
92
+ resolvedURL = posix.join(returnedBaseURL, filename);
92
93
  }
93
94
  }
94
- return `export default ${JSON.stringify(resolvedBaseURL)};`;
95
+ return `export default ${JSON.stringify({
96
+ type: format,
97
+ source: resolvedURL
98
+ })};`;
95
99
  },
96
100
  generateBundle(_, bundle) {
97
101
  if (write)
@@ -169,4 +173,4 @@ function wrapperToSearchString(wrapper) {
169
173
  return `?${new URLSearchParams(Object.entries(wrapper)).toString()}`;
170
174
  }
171
175
 
172
- export { parseWorkerImport, serializeWorkerImport, workerMagicModules, workers };
176
+ export { PREFIX, contentForWorker, workers };
@@ -62,9 +62,7 @@ async function targetsSupportModules(targets) {
62
62
  esmBrowserslist ??= (async () => {
63
63
  const { default: browserslist } = await import('browserslist');
64
64
  return new Set(
65
- browserslist(
66
- "defaults and fully supports es6-module and fully supports es6-module-dynamic-import"
67
- )
65
+ browserslist("defaults and fully supports es6-module-dynamic-import")
68
66
  );
69
67
  })();
70
68
  const esmBrowsers = await esmBrowserslist;
@@ -98,41 +96,21 @@ async function rollupGenerateOptionsForBrowsers(browsers) {
98
96
  let constBindings = true;
99
97
  let objectShorthand = true;
100
98
  let symbols = true;
101
- const isSupported = (browser, version, supportList) => {
102
- const supportedVersionDetails = supportList[browser];
103
- if (supportedVersionDetails == null)
104
- return false;
105
- const supportedVersion = semver.coerce(
106
- supportedVersionDetails.version_added
107
- );
108
- if (supportedVersion == null)
109
- return false;
110
- return semver.gte(version, supportedVersion);
111
- };
112
- for (const browser of browsers) {
113
- const [name, version] = browser.split(" ");
114
- const semverVersion = semver.coerce(version);
115
- if (semverVersion == null)
116
- continue;
117
- const mdnBrowser = BROWSESLIST_BROWSER_TO_MDN_BROWSER.get(name);
118
- if (mdnBrowser == null)
119
- continue;
99
+ for (const { name, version } of mdnBrowserVersions(browsers, semver)) {
120
100
  arrowFunctions &&= isSupported(
121
- mdnBrowser,
122
- semverVersion,
123
- arrowFunctionsSupport
124
- );
125
- constBindings &&= isSupported(
126
- mdnBrowser,
127
- semverVersion,
128
- constBindingsSupport
101
+ arrowFunctionsSupport,
102
+ name,
103
+ version,
104
+ semver
129
105
  );
106
+ constBindings &&= isSupported(constBindingsSupport, name, version, semver);
130
107
  objectShorthand &&= isSupported(
131
- mdnBrowser,
132
- semverVersion,
133
- objectShorthandSupport
108
+ objectShorthandSupport,
109
+ name,
110
+ version,
111
+ semver
134
112
  );
135
- symbols &&= isSupported(mdnBrowser, semverVersion, symbolsSupport);
113
+ symbols &&= isSupported(symbolsSupport, name, version, semver);
136
114
  }
137
115
  return {
138
116
  preset: "es2015",
@@ -143,5 +121,36 @@ async function rollupGenerateOptionsForBrowsers(browsers) {
143
121
  symbols
144
122
  };
145
123
  }
124
+ async function targetsSupportModuleWebWorkers(browsers) {
125
+ const [{ default: semver }, { default: mdn }] = await Promise.all([
126
+ import('semver'),
127
+ import('@mdn/browser-compat-data', { assert: { type: 'json' } })
128
+ ]);
129
+ const workerModulesSupport = mdn.api.Worker.Worker.ecmascript_modules.__compat.support;
130
+ return [...mdnBrowserVersions(browsers, semver)].every(
131
+ ({ name, version }) => isSupported(workerModulesSupport, name, version, semver)
132
+ );
133
+ }
134
+ function* mdnBrowserVersions(browsers, semver) {
135
+ for (const browser of browsers) {
136
+ const [name, version] = browser.split(" ");
137
+ const mdnBrowser = BROWSESLIST_BROWSER_TO_MDN_BROWSER.get(name);
138
+ if (mdnBrowser == null)
139
+ continue;
140
+ const semverVersion = semver.coerce(version);
141
+ if (semverVersion == null)
142
+ continue;
143
+ yield { name: mdnBrowser, version: semverVersion };
144
+ }
145
+ }
146
+ function isSupported(supportList, browser, version, semver) {
147
+ const supportedVersionDetails = supportList[browser];
148
+ if (supportedVersionDetails == null)
149
+ return false;
150
+ const supportedVersion = semver.coerce(supportedVersionDetails.version_added);
151
+ if (supportedVersion == null)
152
+ return false;
153
+ return semver.gte(version, supportedVersion);
154
+ }
146
155
 
147
- export { getBrowserGroupRegularExpressions, getBrowserGroupTargetDetails, getBrowserGroups, rollupGenerateOptionsForBrowsers, targetsSupportModules };
156
+ export { getBrowserGroupRegularExpressions, getBrowserGroupTargetDetails, getBrowserGroups, rollupGenerateOptionsForBrowsers, targetsSupportModuleWebWorkers, targetsSupportModules };