summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Nate Moore <natemoo-re@users.noreply.github.com> 2021-05-03 13:18:08 -0500
committerGravatar GitHub <noreply@github.com> 2021-05-03 13:18:08 -0500
commitc93201a909105bb0ef75278d9635de4b5b8734e7 (patch)
tree5a9c091850a15f5562844a75b6b3d270f6d176c6
parent4ff3add50f170b50f7d629a7d16e03f196e19edc (diff)
downloadastro-c93201a909105bb0ef75278d9635de4b5b8734e7.tar.gz
astro-c93201a909105bb0ef75278d9635de4b5b8734e7.tar.zst
astro-c93201a909105bb0ef75278d9635de4b5b8734e7.zip
Refactor `astro` export map, add `source-map-support` (#161)
* fix: add svelte plugin for esbuild, remove precompiled svelte components * refactor: public export map, public types * feat: add source-map-support to common code paths * chore: move new "exports" to "imports" map, add internal types * Include outPath in error logging for bad load status, and drop error stack (#163) * Include outPath in the error logging for bad load status * Discard error stack since it seems not useful * feat: improve build error logging * refactor: use object param for writeResult Co-authored-by: Kevin (Kun) "Kassimo" Qian <kevinkassimo@gmail.com>
-rw-r--r--package.json9
-rw-r--r--packages/astro/internal.d.ts27
-rw-r--r--packages/astro/package.json10
-rw-r--r--packages/astro/runtime/svelte.mjs4
-rw-r--r--packages/astro/src/ast.ts1
-rw-r--r--packages/astro/src/build.ts29
-rw-r--r--packages/astro/src/cli.ts1
-rw-r--r--packages/astro/src/compiler/index.ts3
-rw-r--r--packages/astro/src/config.ts1
-rw-r--r--packages/astro/src/dev.ts1
-rw-r--r--packages/astro/src/frontend/SvelteWrapper.svelte.client.ts166
-rw-r--r--packages/astro/src/frontend/SvelteWrapper.svelte.server.ts12
-rw-r--r--packages/astro/src/frontend/render/svelte.ts3
-rw-r--r--packages/astro/src/frontend/runtime/svelte.ts2
-rw-r--r--packages/astro/src/logger.ts1
-rw-r--r--packages/astro/src/runtime.ts1
-rw-r--r--packages/astro/src/search.ts1
-rw-r--r--packages/astro/test/astro-doctype.test.js5
-rw-r--r--packages/astro/test/astro-dynamic.test.js1
-rw-r--r--packages/astro/test/astro-markdown.test.js6
-rw-r--r--packages/astro/test/astro-scoped-styles.test.js2
-rw-r--r--packages/astro/test/config-port.test.js2
-rw-r--r--packages/astro/test/helpers.js6
-rw-r--r--packages/astro/test/react-component.test.js4
-rw-r--r--packages/astro/test/snowpack-integration.test.js4
-rw-r--r--packages/astro/tsconfig.json6
-rw-r--r--scripts/cmd/build.js19
-rw-r--r--scripts/utils/svelte-plugin.js60
-rw-r--r--yarn.lock7
29 files changed, 167 insertions, 227 deletions
diff --git a/package.json b/package.json
index 19ef6655d..b7c9232a7 100644
--- a/package.json
+++ b/package.json
@@ -36,13 +36,10 @@
"lerna": "^4.0.0",
"prettier": "^2.2.1",
"tiny-glob": "^0.2.8",
+ "esbuild": "^0.11.17",
+ "svelte": "^3.38.0",
"typescript": "^4.2.4",
- "uvu": "^0.5.1",
- "eslint": "^7.22.0",
- "eslint-config-prettier": "^8.1.0",
- "eslint-plugin-prettier": "^3.3.1",
- "@typescript-eslint/eslint-plugin": "^4.18.0",
- "@typescript-eslint/parser": "^4.18.0"
+ "uvu": "^0.5.1"
},
"dependencies": {
"@changesets/cli": "^2.16.0"
diff --git a/packages/astro/internal.d.ts b/packages/astro/internal.d.ts
new file mode 100644
index 000000000..5d0f0d123
--- /dev/null
+++ b/packages/astro/internal.d.ts
@@ -0,0 +1,27 @@
+declare module '#astro/compiler' {
+ export * from 'astro/dist/types/compiler';
+}
+declare module '#astro/ast' {
+ export * from 'astro/dist/types/ast';
+}
+declare module '#astro/build' {
+ export * from 'astro/dist/types/build';
+}
+declare module '#astro/cli' {
+ export * from 'astro/dist/types/cli';
+}
+declare module '#astro/config' {
+ export * from 'astro/dist/types/config';
+}
+declare module '#astro/dev' {
+ export * from 'astro/dist/types/dev';
+}
+declare module '#astro/logger' {
+ export * from 'astro/dist/types/logger';
+}
+declare module '#astro/runtime' {
+ export * from 'astro/dist/types/runtime';
+}
+declare module '#astro/search' {
+ export * from 'astro/dist/types/search';
+}
diff --git a/packages/astro/package.json b/packages/astro/package.json
index 5a7f10bbf..2da876873 100644
--- a/packages/astro/package.json
+++ b/packages/astro/package.json
@@ -4,11 +4,16 @@
"author": "Skypack",
"license": "MIT",
"type": "module",
+ "types": "./dist/types",
"exports": {
".": "./astro.mjs",
"./snowpack-plugin": "./snowpack-plugin.cjs",
"./components/*.astro": "./components/*.astro",
- "./runtime/svelte": "./runtime/svelte.js"
+ "./runtime/svelte": "./dist/frontend/runtime/svelte.js"
+ },
+ "imports": {
+ "#astro/compiler": "./dist/compiler/index.js",
+ "#astro/*": "./dist/*.js"
},
"bin": {
"astro": "astro.mjs"
@@ -22,7 +27,7 @@
"astro.mjs"
],
"scripts": {
- "build": "astro-scripts build 'src/**/*.ts' && tsc -p tsconfig.json",
+ "build": "astro-scripts build 'src/*.ts' 'src/compiler/index.ts' 'src/frontend/**/*.ts' && tsc",
"postbuild": "astro-scripts copy 'src/**/*.astro'",
"dev": "astro-scripts dev 'src/**/*.ts'",
"test": "uvu test -i fixtures -i test-utils.js"
@@ -72,6 +77,7 @@
"rollup-plugin-terser": "^7.0.2",
"sass": "^1.32.8",
"snowpack": "^3.3.7",
+ "source-map-support": "^0.5.19",
"svelte": "^3.35.0",
"unified": "^9.2.1",
"vue": "^3.0.10",
diff --git a/packages/astro/runtime/svelte.mjs b/packages/astro/runtime/svelte.mjs
deleted file mode 100644
index f23e8eb1d..000000000
--- a/packages/astro/runtime/svelte.mjs
+++ /dev/null
@@ -1,4 +0,0 @@
-import SvelteRuntime from '../lib/frontend/runtime/svelte.js';
-Function.prototype(SvelteRuntime);
-
-export default SvelteRuntime;
diff --git a/packages/astro/src/ast.ts b/packages/astro/src/ast.ts
index 4f6848c89..6e6bd191f 100644
--- a/packages/astro/src/ast.ts
+++ b/packages/astro/src/ast.ts
@@ -1,3 +1,4 @@
+import 'source-map-support/register.js';
import type { Attribute } from 'astro-parser';
// AST utility functions
diff --git a/packages/astro/src/build.ts b/packages/astro/src/build.ts
index 392b0a920..fb603641d 100644
--- a/packages/astro/src/build.ts
+++ b/packages/astro/src/build.ts
@@ -1,3 +1,4 @@
+import 'source-map-support/register.js';
import type { AstroConfig, RuntimeMode } from './@types/astro';
import type { LogOptions } from './logger';
import type { AstroRuntime, LoadResult } from './runtime';
@@ -15,7 +16,7 @@ import { generateRSS } from './build/rss.js';
import { generateSitemap } from './build/sitemap.js';
import { collectStatics } from './build/static.js';
import { canonicalURL } from './build/util.js';
-
+import { pathToFileURL } from 'node:url';
const { mkdir, readFile, writeFile } = fsPromises;
@@ -65,12 +66,19 @@ async function writeFilep(outPath: URL, bytes: string | Buffer, encoding: 'utf8'
await writeFile(outPath, bytes, encoding || 'binary');
}
+interface WriteResultOptions {
+ srcPath: string;
+ result: LoadResult;
+ outPath: URL,
+ encoding: null|'utf8'
+}
+
/** Utility for writing a build result to disk */
-async function writeResult(result: LoadResult, outPath: URL, encoding: null | 'utf8') {
+async function writeResult({ srcPath, result, outPath, encoding }: WriteResultOptions) {
if (result.statusCode === 500 || result.statusCode === 404) {
- error(logging, 'build', result.error || result.statusCode);
+ error(logging, 'build', ` Failed to build ${srcPath}\n${' '.repeat(9)}`, result.error?.message ?? `Unexpected load result (${result.statusCode})`);
} else if (result.statusCode !== 200) {
- error(logging, 'build', `Unexpected load result (${result.statusCode}) for ${fileURLToPath(outPath)}`);
+ error(logging, 'build', ` Failed to build ${srcPath}\n${' '.repeat(9)}`, `Unexpected load result (${result.statusCode}) for ${fileURLToPath(outPath)}`);
} else {
const bytes = result.contents;
await writeFilep(outPath, bytes, encoding);
@@ -87,6 +95,7 @@ function getPageType(filepath: URL): 'collection' | 'static' {
async function buildCollectionPage({ astroRoot, dist, filepath, runtime, site, statics }: PageBuildOptions): Promise<PageResult> {
const rel = path.relative(fileURLToPath(astroRoot) + '/pages', fileURLToPath(filepath)); // pages/index.astro
const pagePath = `/${rel.replace(/\$([^.]+)\.astro$/, '$1')}`;
+ const srcPath = fileURLToPath(new URL('pages/' + rel, astroRoot));
const builtURLs = new Set<string>(); // !important: internal cache that prevents building the same URLs
/** Recursively build collection URLs */
@@ -96,7 +105,7 @@ async function buildCollectionPage({ astroRoot, dist, filepath, runtime, site, s
builtURLs.add(url);
if (result.statusCode === 200) {
const outPath = new URL('./' + url + '/index.html', dist);
- await writeResult(result, outPath, 'utf8');
+ await writeResult({ srcPath, result, outPath, encoding: 'utf8' });
mergeSet(statics, collectStatics(result.contents.toString('utf8')));
}
return result;
@@ -152,10 +161,11 @@ async function buildStaticPage({ astroRoot, dist, filepath, runtime, sitemap, st
relPath = relPath.replace(/\.html$/, '/index.html');
}
+ const srcPath = fileURLToPath(new URL('pages/' + rel, astroRoot));
const outPath = new URL(relPath, dist);
const result = await runtime.load(pagePath);
- await writeResult(result, outPath, 'utf8');
+ await writeResult({ srcPath, result, outPath, encoding: 'utf8' });
if (result.statusCode === 200) {
mergeSet(statics, collectStatics(result.contents.toString('utf8')));
@@ -199,9 +209,8 @@ export async function build(astroConfig: AstroConfig): Promise<0 | 1> {
const pages = await allPages(pageRoot);
let builtURLs: string[] = [];
-
try {
- info(logging , 'build', yellow('! building pages...'));
+ info(logging, 'build', yellow('! building pages...'));
// Vue also console.warns, this silences it.
const release = trapWarn();
await Promise.all(
@@ -258,7 +267,7 @@ export async function build(astroConfig: AstroConfig): Promise<0 | 1> {
const outPath = new URL('.' + url, dist);
const result = await runtime.load(url);
- await writeResult(result, outPath, null);
+ await writeResult({ srcPath: url, result, outPath, encoding: null });
}
if (existsSync(astroConfig.public)) {
@@ -275,7 +284,7 @@ export async function build(astroConfig: AstroConfig): Promise<0 | 1> {
}
info(logging, 'build', green('✔'), 'public folder copied.');
} else {
- if(path.basename(astroConfig.public.toString()) !=='public'){
+ if (path.basename(astroConfig.public.toString()) !== 'public') {
info(logging, 'tip', yellow(`! no public folder ${astroConfig.public} found...`));
}
}
diff --git a/packages/astro/src/cli.ts b/packages/astro/src/cli.ts
index be0dfe27a..b028d754c 100644
--- a/packages/astro/src/cli.ts
+++ b/packages/astro/src/cli.ts
@@ -1,3 +1,4 @@
+import 'source-map-support/register.js';
/* eslint-disable no-console */
import type { AstroConfig } from './@types/astro';
diff --git a/packages/astro/src/compiler/index.ts b/packages/astro/src/compiler/index.ts
index bb8ac61d4..6a9e8dbe6 100644
--- a/packages/astro/src/compiler/index.ts
+++ b/packages/astro/src/compiler/index.ts
@@ -1,3 +1,4 @@
+import 'source-map-support/register.js';
import type { CompileResult, TransformResult } from '../@types/astro';
import type { CompileOptions } from '../@types/compiler.js';
@@ -14,6 +15,8 @@ import { encodeAstroMdx } from './markdown/micromark-mdx-astro.js';
import { transform } from './transform/index.js';
import { codegen } from './codegen/index.js';
+export { scopeRule } from './transform/postcss-scoped-styles/index.js'
+
/** Return Astro internal import URL */
function internalImport(internalPath: string) {
return `/_astro_internal/${internalPath}`;
diff --git a/packages/astro/src/config.ts b/packages/astro/src/config.ts
index 8f3ebaf5a..cf4b5b229 100644
--- a/packages/astro/src/config.ts
+++ b/packages/astro/src/config.ts
@@ -1,3 +1,4 @@
+import 'source-map-support/register.js';
import type { AstroConfig } from './@types/astro';
import { join as pathJoin, resolve as pathResolve } from 'path';
import { existsSync } from 'fs';
diff --git a/packages/astro/src/dev.ts b/packages/astro/src/dev.ts
index 4ca8e28e9..2522ab645 100644
--- a/packages/astro/src/dev.ts
+++ b/packages/astro/src/dev.ts
@@ -1,3 +1,4 @@
+import 'source-map-support/register.js';
import type { AstroConfig } from './@types/astro';
import type { LogOptions } from './logger.js';
diff --git a/packages/astro/src/frontend/SvelteWrapper.svelte.client.ts b/packages/astro/src/frontend/SvelteWrapper.svelte.client.ts
deleted file mode 100644
index 9df168895..000000000
--- a/packages/astro/src/frontend/SvelteWrapper.svelte.client.ts
+++ /dev/null
@@ -1,166 +0,0 @@
-/* eslint-disable */
-// @ts-nocheck
-// TODO: don't precompile this, but it works for now
-import {
- HtmlTag,
- SvelteComponentDev,
- assign,
- claim_component,
- create_component,
- destroy_component,
- detach_dev,
- dispatch_dev,
- empty,
- exclude_internal_props,
- get_spread_object,
- get_spread_update,
- init,
- insert_dev,
- mount_component,
- noop,
- not_equal,
- transition_in,
- transition_out,
- validate_slots,
-} from 'svelte/internal';
-
-const file = 'App.svelte';
-
-// (5:0) <Component {...props}>
-function create_default_slot(ctx) {
- let html_tag;
- let html_anchor;
-
- const block = {
- c: function create() {
- html_anchor = empty();
- this.h();
- },
- l: function claim(nodes) {
- html_anchor = empty();
- this.h();
- },
- h: function hydrate() {
- html_tag = new HtmlTag(html_anchor);
- },
- m: function mount(target, anchor) {
- html_tag.m(/*__astro_children*/ ctx[1], target, anchor);
- insert_dev(target, html_anchor, anchor);
- },
- p: noop,
- d: function destroy(detaching) {
- if (detaching) detach_dev(html_anchor);
- if (detaching) html_tag.d();
- },
- };
-
- dispatch_dev('SvelteRegisterBlock', {
- block,
- id: create_default_slot.name,
- type: 'slot',
- source: '(5:0) <Component {...props}>',
- ctx,
- });
-
- return block;
-}
-
-function create_fragment(ctx) {
- let component;
- let current;
- const component_spread_levels = [/*props*/ ctx[2]];
-
- let component_props = {
- $$slots: { default: [create_default_slot] },
- $$scope: { ctx },
- };
-
- for (let i = 0; i < component_spread_levels.length; i += 1) {
- component_props = assign(component_props, component_spread_levels[i]);
- }
-
- component = new /*Component*/ ctx[0]({ props: component_props, $$inline: true });
-
- const block = {
- c: function create() {
- create_component(component.$$.fragment);
- },
- l: function claim(nodes) {
- claim_component(component.$$.fragment, nodes);
- },
- m: function mount(target, anchor) {
- mount_component(component, target, anchor);
- current = true;
- },
- p: function update(ctx, [dirty]) {
- const component_changes = dirty & /*props*/ 4 ? get_spread_update(component_spread_levels, [get_spread_object(/*props*/ ctx[2])]) : {};
-
- if (dirty & /*$$scope*/ 16) {
- component_changes.$$scope = { dirty, ctx };
- }
-
- component.$set(component_changes);
- },
- i: function intro(local) {
- if (current) return;
- transition_in(component.$$.fragment, local);
- current = true;
- },
- o: function outro(local) {
- transition_out(component.$$.fragment, local);
- current = false;
- },
- d: function destroy(detaching) {
- destroy_component(component, detaching);
- },
- };
-
- dispatch_dev('SvelteRegisterBlock', {
- block,
- id: create_fragment.name,
- type: 'component',
- source: '',
- ctx,
- });
-
- return block;
-}
-
-function instance($$self, $$props, $$invalidate) {
- let { $$slots: slots = {}, $$scope } = $$props;
- validate_slots('App', slots, []);
- const { __astro_component: Component, __astro_children, ...props } = $$props;
-
- $$self.$$set = ($$new_props) => {
- $$invalidate(3, ($$props = assign(assign({}, $$props), exclude_internal_props($$new_props))));
- };
-
- $$self.$capture_state = () => ({ Component, __astro_children, props });
-
- $$self.$inject_state = ($$new_props) => {
- $$invalidate(3, ($$props = assign(assign({}, $$props), $$new_props)));
- };
-
- if ($$props && '$$inject' in $$props) {
- $$self.$inject_state($$props.$$inject);
- }
-
- $$props = exclude_internal_props($$props);
- return [Component, __astro_children, props];
-}
-
-class App extends SvelteComponentDev {
- constructor(options) {
- super(options);
- init(this, options, instance, create_fragment, not_equal, {});
-
- dispatch_dev('SvelteRegisterComponent', {
- component: this,
- tagName: 'App',
- options,
- id: create_fragment.name,
- });
- }
-}
-
-export default App;
diff --git a/packages/astro/src/frontend/SvelteWrapper.svelte.server.ts b/packages/astro/src/frontend/SvelteWrapper.svelte.server.ts
deleted file mode 100644
index c5a25ff03..000000000
--- a/packages/astro/src/frontend/SvelteWrapper.svelte.server.ts
+++ /dev/null
@@ -1,12 +0,0 @@
-/* eslint-disable */
-// @ts-nocheck
-// TODO: don't precompile this, but it works for now
-/* App.svelte generated by Svelte v3.37.0 */
-import { create_ssr_component, validate_component } from 'svelte/internal';
-
-const App = create_ssr_component(($$result, $$props, $$bindings, slots) => {
- const { __astro_component: Component, __astro_children, ...props } = $$props;
- return `${validate_component(Component, 'Component').$$render($$result, Object.assign(props), {}, { default: () => `${__astro_children}` })}`;
-});
-
-export default App;
diff --git a/packages/astro/src/frontend/render/svelte.ts b/packages/astro/src/frontend/render/svelte.ts
index 13e2b8f58..69c7ac8b4 100644
--- a/packages/astro/src/frontend/render/svelte.ts
+++ b/packages/astro/src/frontend/render/svelte.ts
@@ -1,11 +1,12 @@
import type { ComponentRenderer } from '../../@types/renderer';
import type { SvelteComponent } from 'svelte';
import { createRenderer } from './renderer';
-import SvelteWrapper from '../SvelteWrapper.svelte.server';
+import SvelteWrapper from '../SvelteWrapper.server.svelte';
const SvelteRenderer: ComponentRenderer<SvelteComponent> = {
renderStatic(Component) {
return async (props, ...children) => {
+ /// @ts-expect-error
const { html } = SvelteWrapper.render({ __astro_component: Component, __astro_children: children.join('\n'), ...props });
return html;
};
diff --git a/packages/astro/src/frontend/runtime/svelte.ts b/packages/astro/src/frontend/runtime/svelte.ts
index 78b6af6b6..7a41586b4 100644
--- a/packages/astro/src/frontend/runtime/svelte.ts
+++ b/packages/astro/src/frontend/runtime/svelte.ts
@@ -1,4 +1,4 @@
-import SvelteWrapper from '../SvelteWrapper.svelte.client';
+import SvelteWrapper from '../SvelteWrapper.client.svelte';
import type { SvelteComponent } from 'svelte';
export default (target: Element, component: SvelteComponent, props: any, children: string) => {
diff --git a/packages/astro/src/logger.ts b/packages/astro/src/logger.ts
index c42c889f1..f700e91e1 100644
--- a/packages/astro/src/logger.ts
+++ b/packages/astro/src/logger.ts
@@ -1,3 +1,4 @@
+import 'source-map-support/register.js';
import type { CompileError } from 'astro-parser';
import { bold, blue, red, grey, underline } from 'kleur/colors';
import { Writable } from 'stream';
diff --git a/packages/astro/src/runtime.ts b/packages/astro/src/runtime.ts
index 5369996f4..d08c0f387 100644
--- a/packages/astro/src/runtime.ts
+++ b/packages/astro/src/runtime.ts
@@ -1,3 +1,4 @@
+import 'source-map-support/register.js';
import { fileURLToPath } from 'url';
import type { SnowpackDevServer, ServerRuntime as SnowpackServerRuntime, SnowpackConfig } from 'snowpack';
import type { AstroConfig, CollectionResult, CollectionRSS, CreateCollection, Params, RuntimeMode } from './@types/astro';
diff --git a/packages/astro/src/search.ts b/packages/astro/src/search.ts
index c141e4a77..f097751b1 100644
--- a/packages/astro/src/search.ts
+++ b/packages/astro/src/search.ts
@@ -1,3 +1,4 @@
+import 'source-map-support/register.js';
import { existsSync } from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
diff --git a/packages/astro/test/astro-doctype.test.js b/packages/astro/test/astro-doctype.test.js
index 7f6bea189..91d422665 100644
--- a/packages/astro/test/astro-doctype.test.js
+++ b/packages/astro/test/astro-doctype.test.js
@@ -1,8 +1,9 @@
import { fileURLToPath } from 'url';
import { suite } from 'uvu';
import * as assert from 'uvu/assert';
-import { loadConfig } from '../dist/config.js';
-import { createRuntime } from '../dist/runtime.js';
+import { loadConfig } from '#astro/config';
+import { createRuntime } from '#astro/runtime';
+
const DType = suite('doctype');
diff --git a/packages/astro/test/astro-dynamic.test.js b/packages/astro/test/astro-dynamic.test.js
index c3743ddad..0bf25df8a 100644
--- a/packages/astro/test/astro-dynamic.test.js
+++ b/packages/astro/test/astro-dynamic.test.js
@@ -1,6 +1,5 @@
import { suite } from 'uvu';
import * as assert from 'uvu/assert';
-import { doc } from './test-utils.js';
import { setup, setupBuild } from './helpers.js';
const DynamicComponents = suite('Dynamic components tests');
diff --git a/packages/astro/test/astro-markdown.test.js b/packages/astro/test/astro-markdown.test.js
index 5845a8c5c..ba0197e5f 100644
--- a/packages/astro/test/astro-markdown.test.js
+++ b/packages/astro/test/astro-markdown.test.js
@@ -3,9 +3,9 @@ import { join } from 'path';
import { fileURLToPath } from 'url';
import { suite } from 'uvu';
import * as assert from 'uvu/assert';
-import { createRuntime } from '../dist/runtime.js';
-import { build } from '../dist/build.js';
-import { loadConfig } from '../dist/config.js';
+import { createRuntime } from '#astro/runtime';
+import { build } from '#astro/build';
+import { loadConfig } from '#astro/config';
import { doc } from './test-utils.js';
const { rmdir, readFile } = fsPromises;
diff --git a/packages/astro/test/astro-scoped-styles.test.js b/packages/astro/test/astro-scoped-styles.test.js
index e50a9bc8b..1fc11490b 100644
--- a/packages/astro/test/astro-scoped-styles.test.js
+++ b/packages/astro/test/astro-scoped-styles.test.js
@@ -1,6 +1,6 @@
import { suite } from 'uvu';
import * as assert from 'uvu/assert';
-import { scopeRule } from '../dist/compiler/transform/postcss-scoped-styles/index.js';
+import { scopeRule } from '#astro/compiler';
const ScopedStyles = suite('Astro PostCSS Scoped Styles Plugin');
diff --git a/packages/astro/test/config-port.test.js b/packages/astro/test/config-port.test.js
index 87c57536c..d8e4fdf14 100644
--- a/packages/astro/test/config-port.test.js
+++ b/packages/astro/test/config-port.test.js
@@ -1,7 +1,7 @@
import { suite } from 'uvu';
import * as assert from 'uvu/assert';
import { runDevServer } from './helpers.js';
-import { loadConfig } from '../dist/config.js';
+import { loadConfig } from '#astro/config';
const ConfigPort = suite('Config path');
diff --git a/packages/astro/test/helpers.js b/packages/astro/test/helpers.js
index 625f1a831..3e8ed6e54 100644
--- a/packages/astro/test/helpers.js
+++ b/packages/astro/test/helpers.js
@@ -1,8 +1,8 @@
import { fileURLToPath } from 'url';
-import { build as astroBuild } from '../dist/build.js';
+import { build as astroBuild } from '#astro/build';
import { readFile } from 'fs/promises';
-import { createRuntime } from '../dist/runtime.js';
-import { loadConfig } from '../dist/config.js';
+import { createRuntime } from '#astro/runtime';
+import { loadConfig } from '#astro/config';
import * as assert from 'uvu/assert';
import execa from 'execa';
diff --git a/packages/astro/test/react-component.test.js b/packages/astro/test/react-component.test.js
index cdb4e2db2..d7442bc98 100644
--- a/packages/astro/test/react-component.test.js
+++ b/packages/astro/test/react-component.test.js
@@ -1,8 +1,8 @@
import { fileURLToPath } from 'url';
import { suite } from 'uvu';
import * as assert from 'uvu/assert';
-import { createRuntime } from '../dist/runtime.js';
-import { loadConfig } from '../dist/config.js';
+import { createRuntime } from '#astro/runtime';
+import { loadConfig } from '#astro/config';
import { doc } from './test-utils.js';
const React = suite('React Components');
diff --git a/packages/astro/test/snowpack-integration.test.js b/packages/astro/test/snowpack-integration.test.js
index 86d73ea95..ebd19f993 100644
--- a/packages/astro/test/snowpack-integration.test.js
+++ b/packages/astro/test/snowpack-integration.test.js
@@ -1,8 +1,8 @@
import { fileURLToPath } from 'url';
import { suite } from 'uvu';
import * as assert from 'uvu/assert';
-import { createRuntime } from '../dist/runtime.js';
-import { loadConfig } from '../dist/config.js';
+import { createRuntime } from '#astro/runtime';
+import { loadConfig } from '#astro/config';
import { promises as fsPromises } from 'fs';
import { relative as pathRelative } from 'path';
diff --git a/packages/astro/tsconfig.json b/packages/astro/tsconfig.json
index 2174981fa..8f0cdf74d 100644
--- a/packages/astro/tsconfig.json
+++ b/packages/astro/tsconfig.json
@@ -1,9 +1,11 @@
{
"extends": "../../tsconfig.base.json",
- "include": ["src"],
+ "include": ["src", "index.d.ts"],
"compilerOptions": {
+ "allowJs": true,
"target": "ES2020",
"module": "ES2020",
- "outDir": "./dist"
+ "outDir": "./dist",
+ "declarationDir": "./dist/types"
}
}
diff --git a/scripts/cmd/build.js b/scripts/cmd/build.js
index ea112f018..81761030e 100644
--- a/scripts/cmd/build.js
+++ b/scripts/cmd/build.js
@@ -1,25 +1,30 @@
import esbuild from 'esbuild';
+import svelte from '../utils/svelte-plugin.js';
import del from 'del';
import { promises as fs } from 'fs';
import { dim, green, red, yellow } from 'kleur/colors';
import glob from 'tiny-glob';
/** @type {import('esbuild').BuildOptions} */
-const config = {
+const defaultConfig = {
bundle: true,
minify: true,
- sourcemap: 'inline',
format: 'esm',
platform: 'node',
target: 'node14',
+ sourcemap: 'inline',
+ sourcesContent: false,
+ plugins: [svelte()],
};
-export default async function build(pattern, ...args) {
- const isDev = args.pop() === 'IS_DEV';
- const entryPoints = await glob(pattern, { filesOnly: true, absolute: true });
+export default async function build(...args) {
+ const config = Object.assign({}, defaultConfig);
+ const isDev = args.slice(-1)[0] === 'IS_DEV';
+ let entryPoints = [].concat(...(await Promise.all(args.map((pattern) => glob(pattern, { filesOnly: true, absolute: true })))));
+
const { type = 'module', dependencies = {} } = await fs.readFile('./package.json').then((res) => JSON.parse(res.toString()));
const format = type === 'module' ? 'esm' : 'cjs';
- const external = Object.keys(dependencies);
+ const external = [...Object.keys(dependencies), 'source-map-support', 'source-map-support/register.js'];
const outdir = 'dist';
await clean(outdir);
@@ -61,5 +66,5 @@ export default async function build(pattern, ...args) {
}
async function clean(outdir) {
- return del(`!${outdir}/**/*.d.ts`);
+ return del([`${outdir}/**`, `!${outdir}/**/*.d.ts`]);
}
diff --git a/scripts/utils/svelte-plugin.js b/scripts/utils/svelte-plugin.js
new file mode 100644
index 000000000..84839ffd7
--- /dev/null
+++ b/scripts/utils/svelte-plugin.js
@@ -0,0 +1,60 @@
+// @ts-nocheck
+import { compile } from 'svelte/compiler';
+import { relative, isAbsolute, join, dirname } from 'path';
+import { promises as fs } from 'fs';
+
+const convertMessage = ({ message, start, end, filename, frame }) => ({
+ text: message,
+ location: start && end && {
+ file: filename,
+ line: start.line,
+ column: start.column,
+ length: start.line === end.line ? end.column - start.column : 0,
+ lineText: frame,
+ },
+})
+
+const handleLoad = async (args, generate) => {
+ const { path } = args;
+ const source = await fs.readFile(path, 'utf8');
+ const filename = relative(process.cwd(), path)
+
+ try {
+ let compileOptions = { css: false, generate, hydratable: true };
+
+ let { js, warnings } = compile(source, { ...compileOptions, filename })
+ let contents = js.code + `\n//# sourceMappingURL=` + js.map.toUrl()
+
+ return { loader: 'js', contents, resolveDir: dirname(path), warnings: warnings.map(w => convertMessage(w)) };
+ } catch (e) {
+ return { errors: [convertMessage(e)] }
+ }
+}
+
+export default function sveltePlugin() {
+ return {
+ name: 'svelte-esbuild',
+ setup(build) {
+ build.onResolve({ filter: /\.svelte$/ }, args => {
+ let path = args.path.replace(/\.(?:client|server)/, '');
+ path = isAbsolute(path) ? path : join(args.resolveDir, path)
+
+ if (/\.client\.svelte$/.test(args.path)) {
+ return {
+ path,
+ namespace: 'svelte:client',
+ }
+ }
+
+ if (/\.server\.svelte$/.test(args.path)) {
+ return {
+ path,
+ namespace: 'svelte:server',
+ }
+ }
+ });
+ build.onLoad({ filter: /.*/, namespace: 'svelte:client' }, (args) => handleLoad(args, 'dom'))
+ build.onLoad({ filter: /.*/, namespace: 'svelte:server' }, (args) => handleLoad(args, 'ssr'))
+ },
+ }
+}
diff --git a/yarn.lock b/yarn.lock
index 481e86c4f..db87d1d56 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -4243,6 +4243,11 @@ esbuild@^0.11.16:
resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.11.16.tgz"
integrity sha512-34ZWjo4ouvM5cDe7uRoM9GFuMyEmpH9fnVYmomvS1cq9ED9d/0ZG1r+p4P2VbX7ihjv36zA2SWTmP8Zmt/EANA==
+esbuild@^0.11.17:
+ version "0.11.17"
+ resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.11.17.tgz#d2a929a918864ab3642178f4c0dc84784f863b53"
+ integrity sha512-Yj+rQATpLLU36ymg0/laLXn9FUoiGUl7mDPUJ0toQ5nXKFrj/rmIEkQ34T1GeiV2cP2SrT0G0s7xiNuDcsIyBg==
+
esbuild@^0.9.3:
version "0.9.7"
resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.9.7.tgz"
@@ -10799,7 +10804,7 @@ svelte-preprocess@^4.6.0:
detect-indent "^6.0.0"
strip-indent "^3.0.0"
-svelte@^3.35.0:
+svelte@^3.35.0, svelte@^3.38.0:
version "3.38.0"
resolved "https://registry.npmjs.org/svelte/-/svelte-3.38.0.tgz"
integrity sha512-V0CbyzvXEka7zQtRYt++cpPh0zxxDUTIeNlq4KncGXn2qHnQFZ2i4L4+2QOfLwOudb9cewJeegupBQcscnBaaA==