From aaea5cfcbdf53af88654afdd563d7c3a6f18fdcc Mon Sep 17 00:00:00 2001 From: Ignatius Bagus Date: Sun, 22 Aug 2021 21:40:09 +0700 Subject: [PATCH] [fix] exclude emitted declarations on packaging (#2247) --- .changeset/lazy-spies-wash.md | 5 +++ packages/kit/package.json | 4 +- packages/kit/src/packaging/index.js | 38 ++++++++---------- .../files-exclude/expected/Test.svelte | 12 ++++++ .../files-exclude/expected/Test.svelte.d.ts | 40 +++++++++++++++++++ .../files-exclude/expected/package.json | 5 ++- .../files-exclude/src/lib/Test.exclude.svelte | 0 .../files-exclude/src/lib/Test.svelte | 12 ++++++ .../fixtures/files-exclude/src/lib/exclude.js | 0 .../fixtures/files-exclude/svelte.config.js | 2 +- packages/kit/src/packaging/test/index.js | 2 +- pnpm-lock.yaml | 22 ++++++---- 12 files changed, 107 insertions(+), 35 deletions(-) create mode 100644 .changeset/lazy-spies-wash.md create mode 100644 packages/kit/src/packaging/test/fixtures/files-exclude/expected/Test.svelte create mode 100644 packages/kit/src/packaging/test/fixtures/files-exclude/expected/Test.svelte.d.ts create mode 100644 packages/kit/src/packaging/test/fixtures/files-exclude/src/lib/Test.exclude.svelte create mode 100644 packages/kit/src/packaging/test/fixtures/files-exclude/src/lib/Test.svelte create mode 100644 packages/kit/src/packaging/test/fixtures/files-exclude/src/lib/exclude.js diff --git a/.changeset/lazy-spies-wash.md b/.changeset/lazy-spies-wash.md new file mode 100644 index 000000000000..3b8578991306 --- /dev/null +++ b/.changeset/lazy-spies-wash.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Exclude emitted declarations on packaging diff --git a/packages/kit/package.json b/packages/kit/package.json index fa2fc010bfb8..7cc1484a9489 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -12,8 +12,8 @@ "@rollup/plugin-replace": "^2.4.2", "@types/amphtml-validator": "^1.0.1", "@types/cookie": "^0.4.0", - "@types/globrex": "^0.1.1", "@types/marked": "^2.0.2", + "@types/micromatch": "^4.0.2", "@types/mime": "^2.0.3", "@types/node": "^14.14.43", "@types/rimraf": "^3.0.0", @@ -22,10 +22,10 @@ "cookie": "^0.4.1", "devalue": "^2.0.1", "eslint": "^7.25.0", - "globrex": "^0.1.2", "kleur": "^4.1.4", "locate-character": "^2.0.5", "marked": "^2.0.3", + "micromatch": "^4.0.4", "mime": "^2.5.2", "node-fetch": "^3.0.0-beta.9", "port-authority": "^1.1.2", diff --git a/packages/kit/src/packaging/index.js b/packages/kit/src/packaging/index.js index 21eb248ec704..4e466d042be2 100644 --- a/packages/kit/src/packaging/index.js +++ b/packages/kit/src/packaging/index.js @@ -1,6 +1,6 @@ import * as fs from 'fs'; import * as path from 'path'; -import globrex from 'globrex'; +import micromatch from 'micromatch'; import { createRequire } from 'module'; import { preprocess } from 'svelte/compiler'; import { mkdirp, rimraf, walk } from '../utils/filesystem.js'; @@ -21,8 +21,8 @@ export async function make_package(config, cwd = process.cwd()) { const files_filter = create_filter(config.kit.package.files); const exports_filter = create_filter({ - ...config.kit.package.exports, - exclude: [...config.kit.package.exports.exclude, '*.d.ts'] + include: config.kit.package.exports.include, + exclude: [...config.kit.package.exports.exclude, '**/*.d.ts'] }); const files = walk(config.kit.files.lib); @@ -40,14 +40,19 @@ export async function make_package(config, cwd = process.cwd()) { pkg.exports['./package.json'] = './package.json'; for (const file of files) { - if (!files_filter(file)) continue; + const ext = path.extname(file); + const svelte_ext = config.extensions.find((ext) => file.endsWith(ext)); // unlike `ext`, could be e.g. `.svelte.md` + + if (!files_filter(file.replace(/\\/g, '/'))) { + const dts_file = (svelte_ext ? file : file.slice(0, -ext.length)) + '.d.ts'; + const dts_path = path.join(cwd, config.kit.package.dir, dts_file); + if (fs.existsSync(dts_path)) fs.unlinkSync(dts_path); + continue; + } const filename = path.join(config.kit.files.lib, file); const source = fs.readFileSync(filename, 'utf8'); - const ext = path.extname(file); - const svelte_ext = config.extensions.find((ext) => file.endsWith(ext)); // unlike `ext`, could be e.g. `.svelte.md` - /** @type {string} */ let out_file; @@ -163,21 +168,12 @@ function load_tsconfig(filename, ts) { } /** - * @param {{ - * include: string[]; - * exclude: string[]; - * }} options + * @param {{ include: string[]; exclude: string[] }} options + * @returns {(str: string) => boolean} */ function create_filter(options) { - const include = options.include.map((str) => str && globrex(str)); - const exclude = options.exclude.map((str) => str && globrex(str)); - - /** @param {string} str */ - const filter = (str) => - include.some((glob) => glob && glob.regex.test(str)) && - !exclude.some((glob) => glob && glob.regex.test(str)); - - return filter; + return (str) => + micromatch.isMatch(str, options.include) && !micromatch.isMatch(str, options.exclude); } /** @@ -195,7 +191,7 @@ function write(file, contents) { export async function emit_dts(config) { const require = createRequire(import.meta.url); const emit = await try_load_svelte2tsx(); - emit({ + await emit({ libRoot: config.kit.files.lib, svelteShimsPath: require.resolve('svelte2tsx/svelte-shims.d.ts'), declarationDir: config.kit.package.dir diff --git a/packages/kit/src/packaging/test/fixtures/files-exclude/expected/Test.svelte b/packages/kit/src/packaging/test/fixtures/files-exclude/expected/Test.svelte new file mode 100644 index 000000000000..31d118397f9d --- /dev/null +++ b/packages/kit/src/packaging/test/fixtures/files-exclude/expected/Test.svelte @@ -0,0 +1,12 @@ + + + diff --git a/packages/kit/src/packaging/test/fixtures/files-exclude/expected/Test.svelte.d.ts b/packages/kit/src/packaging/test/fixtures/files-exclude/expected/Test.svelte.d.ts new file mode 100644 index 000000000000..8cfa75e62de7 --- /dev/null +++ b/packages/kit/src/packaging/test/fixtures/files-exclude/expected/Test.svelte.d.ts @@ -0,0 +1,40 @@ +/** @typedef {typeof __propDef.props} TestProps */ +/** @typedef {typeof __propDef.events} TestEvents */ +/** @typedef {typeof __propDef.slots} TestSlots */ +export default class Test extends SvelteComponentTyped< + { + astring: string; + }, + { + event: CustomEvent; + } & { + [evt: string]: CustomEvent; + }, + { + default: { + astring: string; + }; + } +> { + get astring(): string; +} +export type TestProps = typeof __propDef.props; +export type TestEvents = typeof __propDef.events; +export type TestSlots = typeof __propDef.slots; +import { SvelteComponentTyped } from 'svelte'; +declare const __propDef: { + props: { + astring: string; + }; + events: { + event: CustomEvent; + } & { + [evt: string]: CustomEvent; + }; + slots: { + default: { + astring: string; + }; + }; +}; +export {}; diff --git a/packages/kit/src/packaging/test/fixtures/files-exclude/expected/package.json b/packages/kit/src/packaging/test/fixtures/files-exclude/expected/package.json index 33f358654c3a..68d90e6dab5a 100644 --- a/packages/kit/src/packaging/test/fixtures/files-exclude/expected/package.json +++ b/packages/kit/src/packaging/test/fixtures/files-exclude/expected/package.json @@ -1,11 +1,12 @@ { - "name": "javascript", + "name": "files-exclude", "version": "1.0.0", - "description": "standard javascript package", + "description": "files.exclude settings configured", "type": "module", "exports": { "./package.json": "./package.json", "./internal": "./internal/index.js", + "./Test.svelte": "./Test.svelte", ".": "./index.js" } } diff --git a/packages/kit/src/packaging/test/fixtures/files-exclude/src/lib/Test.exclude.svelte b/packages/kit/src/packaging/test/fixtures/files-exclude/src/lib/Test.exclude.svelte new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/kit/src/packaging/test/fixtures/files-exclude/src/lib/Test.svelte b/packages/kit/src/packaging/test/fixtures/files-exclude/src/lib/Test.svelte new file mode 100644 index 000000000000..7ee23636e6c0 --- /dev/null +++ b/packages/kit/src/packaging/test/fixtures/files-exclude/src/lib/Test.svelte @@ -0,0 +1,12 @@ + + + diff --git a/packages/kit/src/packaging/test/fixtures/files-exclude/src/lib/exclude.js b/packages/kit/src/packaging/test/fixtures/files-exclude/src/lib/exclude.js new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/packages/kit/src/packaging/test/fixtures/files-exclude/svelte.config.js b/packages/kit/src/packaging/test/fixtures/files-exclude/svelte.config.js index b39f6d4af9f2..8622936df138 100644 --- a/packages/kit/src/packaging/test/fixtures/files-exclude/svelte.config.js +++ b/packages/kit/src/packaging/test/fixtures/files-exclude/svelte.config.js @@ -3,7 +3,7 @@ const config = { kit: { package: { files: { - exclude: ['**/exclude.js', '*.mjs'] + exclude: ['**/*exclude.{js,svelte}', '**/*.mjs'] } } } diff --git a/packages/kit/src/packaging/test/index.js b/packages/kit/src/packaging/test/index.js index 616637d8c8e3..7516853b5067 100644 --- a/packages/kit/src/packaging/test/index.js +++ b/packages/kit/src/packaging/test/index.js @@ -83,7 +83,7 @@ test('create package with default exports settings (replace)', async () => { await test_make_package('exports-replace'); }); -test.skip('create package with files.exclude settings', async () => { +test('create package with files.exclude settings', async () => { await test_make_package('files-exclude'); }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f29c72f0deaf..dbc2bd803fa0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -204,8 +204,8 @@ importers: '@sveltejs/vite-plugin-svelte': ^1.0.0-next.16 '@types/amphtml-validator': ^1.0.1 '@types/cookie': ^0.4.0 - '@types/globrex': ^0.1.1 '@types/marked': ^2.0.2 + '@types/micromatch': ^4.0.2 '@types/mime': ^2.0.3 '@types/node': ^14.14.43 '@types/rimraf': ^3.0.0 @@ -215,10 +215,10 @@ importers: cookie: ^0.4.1 devalue: ^2.0.1 eslint: ^7.25.0 - globrex: ^0.1.2 kleur: ^4.1.4 locate-character: ^2.0.5 marked: ^2.0.3 + micromatch: ^4.0.4 mime: ^2.5.2 node-fetch: ^3.0.0-beta.9 port-authority: ^1.1.2 @@ -242,8 +242,8 @@ importers: '@rollup/plugin-replace': 2.4.2_rollup@2.55.0 '@types/amphtml-validator': 1.0.1 '@types/cookie': 0.4.0 - '@types/globrex': 0.1.1 '@types/marked': 2.0.2 + '@types/micromatch': 4.0.2 '@types/mime': 2.0.3 '@types/node': 14.14.43 '@types/rimraf': 3.0.0 @@ -252,10 +252,10 @@ importers: cookie: 0.4.1 devalue: 2.0.1 eslint: 7.25.0 - globrex: 0.1.2 kleur: 4.1.4 locate-character: 2.0.5 marked: 2.0.3 + micromatch: 4.0.4 mime: 2.5.2 node-fetch: 3.0.0-beta.9 port-authority: 1.1.2 @@ -816,6 +816,10 @@ packages: '@types/node': 15.0.1 dev: true + /@types/braces/3.0.1: + resolution: {integrity: sha512-+euflG6ygo4bn0JHtn4pYqcXwRtLvElQ7/nnjDu7iYG56H0+OhCd7d6Ug0IE3WcFpZozBKW2+80FUbv5QGk5AQ==} + dev: true + /@types/compression/1.7.1: resolution: {integrity: sha512-d6K1bU3qIjtfB2u+A1N0WDf62LpewRjrvbqY79qlPwk2otgQ4mWB4+LzPCWTvGmcuVwo+zAroEhsNlJavRcFvg==} dependencies: @@ -868,10 +872,6 @@ packages: '@types/node': 14.14.43 dev: true - /@types/globrex/0.1.1: - resolution: {integrity: sha512-bce8X5Yb8l8ou2VDaEG8CYY1p6NynmswkaasO1pdAzFASKJ43sjf9MQdVH6VmKNG2bPEEmvI5onJJSH+1qOMOA==} - dev: true - /@types/istanbul-lib-coverage/2.0.3: resolution: {integrity: sha512-sz7iLqvVUg1gIedBOvlkxPlc8/uVzyS5OwGz1cKjXzkl3FpL3al0crU8YGU1WoHkxn0Wxbw5tyi6hvzJKNzFsw==} dev: true @@ -888,6 +888,12 @@ packages: resolution: {integrity: sha512-P4zanhCQKs4tiWPPBGpB7lHflgFCP9DFGNI5YtpW9MALKoy2qs9rHNWJ+z55cegD9uCfnmsKuaosq9FNvbxrOw==} dev: true + /@types/micromatch/4.0.2: + resolution: {integrity: sha512-oqXqVb0ci19GtH0vOA/U2TmHTcRY9kuZl4mqUxe0QmJAlIW13kzhuK5pi1i9+ngav8FjpSb9FVS/GE00GLX1VA==} + dependencies: + '@types/braces': 3.0.1 + dev: true + /@types/mime/1.3.2: resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} dev: true