-
-
Notifications
You must be signed in to change notification settings - Fork 32
feat: add type definitions #88
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Large diffs are not rendered by default.
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,8 +9,26 @@ import { getExports, renderExports } from "./utils"; | |
|
||
const FOOTER = "/*** EXPORTS FROM exports-loader ***/\n"; | ||
|
||
/** @typedef {import("source-map").RawSourceMap} RawSourceMap */ | ||
/** @typedef {import("schema-utils/declarations/validate").Schema} Schema */ | ||
|
||
/** | ||
* @template T | ||
* @typedef {Object} LoaderOptions<T>Allows to choose how errors are displayed. | ||
* @property {"commonjs" | "module"} [type] | ||
* @property {string| object | string[] | object[]} exports | ||
*/ | ||
|
||
/** | ||
* The exports loader allows to setup exports | ||
* @template T | ||
* @this {import("webpack").LoaderContext<LoaderOptions<T>>} | ||
* @param {string} content | ||
* @param { RawSourceMap } sourceMap | ||
*/ | ||
|
||
export default function loader(content, sourceMap) { | ||
const options = this.getOptions(schema); | ||
const options = this.getOptions(/** @type {Schema} */ (schema)); | ||
const type = options.type || "module"; | ||
const callback = this.async(); | ||
|
||
|
@@ -19,7 +37,7 @@ export default function loader(content, sourceMap) { | |
try { | ||
exports = getExports(type, options.exports); | ||
} catch (error) { | ||
callback(error); | ||
callback(/** @type {Error | null | undefined} */ (error)); | ||
|
||
return; | ||
} | ||
|
@@ -36,10 +54,12 @@ export default function loader(content, sourceMap) { | |
|
||
const result = node.toStringWithSourceMap({ file: this.resourcePath }); | ||
|
||
// @ts-ignore map only has toString() method in types | ||
callback(null, result.code, result.map.toJSON()); | ||
|
||
return; | ||
} | ||
|
||
// @ts-ignore sourceMap in the webpack doesn't have the type RawSourceMap | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We should avoid ignore There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Seems like the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Weird, it is interface with the same methods... There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This is in webpack declare interface SourceMap {
version: number;
sources: string[];
mappings: string;
file?: string;
sourceRoot?: string;
sourcesContent?: string[];
names?: string[];
} This is in source-map export interface RawSourceMap extends StartOfSourceMap {
version: string;
sources: string[];
names: string[];
sourcesContent?: string[];
mappings: string;
} There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We should investigate it, maybe add better types, because ignore is not good idea for types, looks like problem in There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. which version are you mentioning? webpack? It is in its latest version. I hope the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. What if we export the SourceMap from webpack and consume it? Is it not recommended There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think webpack have own types for source maps due to this we have problems with types There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yep There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Bump |
||
callback(null, `${content}\n${FOOTER}${exportsCode}`, sourceMap); | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
{ | ||
"compilerOptions": { | ||
"target": "esnext", | ||
"moduleResolution": "node", | ||
"allowJs": true, | ||
"checkJs": true, | ||
"strict": true, | ||
"types": ["node"], | ||
"resolveJsonModule": true, | ||
"newLine": "LF", | ||
"allowSyntheticDefaultImports": true | ||
}, | ||
"include": ["./src/**/*"] | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
declare const _exports: typeof loader.default; | ||
export = _exports; | ||
import loader = require("./index"); |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
/** @typedef {import("source-map").RawSourceMap} RawSourceMap */ | ||
/** @typedef {import("schema-utils/declarations/validate").Schema} Schema */ | ||
/** | ||
* @template T | ||
* @typedef {Object} LoaderOptions<T>Allows to choose how errors are displayed. | ||
* @property {"commonjs" | "module"} [type] | ||
* @property {string| object | string[] | object[]} exports | ||
*/ | ||
/** | ||
* The exports loader allows to setup exports | ||
* @template T | ||
* @this {import("webpack").LoaderContext<LoaderOptions<T>>} | ||
* @param {string} content | ||
* @param { RawSourceMap } sourceMap | ||
*/ | ||
export default function loader<T>( | ||
this: import("webpack").LoaderContext<LoaderOptions<T>>, | ||
content: string, | ||
sourceMap: RawSourceMap | ||
): void; | ||
export type RawSourceMap = import("source-map").RawSourceMap; | ||
export type Schema = import("schema-utils/declarations/validate").Schema; | ||
/** | ||
* <T>Allows to choose how errors are displayed. | ||
*/ | ||
export type LoaderOptions<T> = { | ||
type?: "module" | "commonjs" | undefined; | ||
exports: string | object | string[] | object[]; | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
export type RawSourceMap = import("source-map").RawSourceMap; | ||
/** | ||
* <T> | ||
*/ | ||
export type LoaderOptions<T> = { | ||
type?: string | undefined; | ||
exports?: string | object | string[] | object[] | undefined; | ||
}; | ||
/** | ||
* The exports loader allows to setup exports | ||
*/ | ||
export type LoaderOption<T> = import("webpack").LoaderContext<LoaderOptions<T>>; | ||
export type Identifier = { | ||
type: string; | ||
value?: string | undefined; | ||
}; | ||
export type Export = { | ||
syntax: string; | ||
name?: string | undefined; | ||
alias?: string | undefined; | ||
}; | ||
/** | ||
* | ||
* @param {string} type | ||
* @param {string| object | string[] | object[]} exports | ||
* @returns | ||
*/ | ||
export function getExports( | ||
type: string, | ||
exports: string | object | string[] | object[] | ||
): Export[]; | ||
/** | ||
* @template T | ||
* @param {LoaderOption<T>} loaderContext | ||
* @param {"commonjs"|"module"} type | ||
* @param {Array<Export>} exports | ||
* @returns | ||
*/ | ||
export function renderExports<T>( | ||
loaderContext: import("webpack").LoaderContext<LoaderOptions<T>>, | ||
type: "commonjs" | "module", | ||
exports: Array<Export> | ||
): string; |
Uh oh!
There was an error while loading. Please reload this page.