-
Notifications
You must be signed in to change notification settings - Fork 43
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Add CommonJS version (issue #177)
- Loading branch information
Showing
7 changed files
with
7,739 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 1,74 @@ | ||
/** | ||
* build.js | ||
* @ndaidong | ||
**/ | ||
|
||
import { readFileSync, writeFileSync, copyFileSync, rmSync, mkdirSync } from 'fs' | ||
|
||
import { buildSync } from 'esbuild' | ||
|
||
const pkg = JSON.parse(readFileSync('./package.json', { encoding: 'utf-8' })) | ||
|
||
rmSync('dist', { | ||
force: true, | ||
recursive: true, | ||
}) | ||
mkdirSync('dist') | ||
|
||
const buildTime = (new Date()).toISOString() | ||
const comment = [ | ||
`// ${pkg.name}@${pkg.version}, by ${pkg.author}`, | ||
`built with esbuild at ${buildTime}`, | ||
`published under ${pkg.license} license`, | ||
].join(' - ') | ||
|
||
const baseOpt = { | ||
entryPoints: ['src/main.js'], | ||
bundle: true, | ||
charset: 'utf8', | ||
target: ['es2020', 'node14'], | ||
pure: ['console.log', 'debug', 'alert'], | ||
legalComments: 'none', | ||
minify: false, | ||
sourcemap: false, | ||
write: true, | ||
} | ||
|
||
const esmVersion = { | ||
...baseOpt, | ||
platform: 'browser', | ||
format: 'esm', | ||
mainFields: ['module'], | ||
outfile: 'dist/oembed-extractor.esm.js', | ||
banner: { | ||
js: comment, | ||
}, | ||
} | ||
buildSync(esmVersion) | ||
|
||
const cjsVersion = { | ||
...baseOpt, | ||
platform: 'node', | ||
format: 'cjs', | ||
mainFields: ['main'], | ||
outfile: 'dist/cjs/oembed-extractor.js', | ||
banner: { | ||
js: comment, | ||
}, | ||
} | ||
buildSync(cjsVersion) | ||
|
||
const cjspkg = { | ||
name: pkg.name, | ||
version: pkg.version, | ||
main: `./${pkg.name}.js`, | ||
} | ||
|
||
writeFileSync( | ||
'dist/cjs/package.json', | ||
JSON.stringify(cjspkg, null, ' '), | ||
'utf8' | ||
) | ||
|
||
// copy types definition to cjs dir | ||
copyFileSync('./index.d.ts', 'dist/cjs/index.d.ts') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 1,44 @@ | ||
// release.test | ||
|
||
/* eslint-env jest */ | ||
|
||
import { | ||
existsSync, | ||
readFileSync | ||
} from 'fs' | ||
|
||
const pkg = JSON.parse(readFileSync('./package.json')) | ||
|
||
const esmFile = './dist/oembed-extractor.esm.js' | ||
const cjsFile = './dist/cjs/oembed-extractor.js' | ||
const cjsPkg = JSON.parse(readFileSync('./dist/cjs/package.json')) | ||
|
||
describe('Validate commonjs version output', () => { | ||
test(`Check if ${cjsFile} created`, () => { | ||
expect(existsSync(cjsFile)).toBeTruthy() | ||
}) | ||
const constent = readFileSync(cjsFile, 'utf8') | ||
const lines = constent.split('\n') | ||
test('Check if file meta contains package info', () => { | ||
expect(lines[0].includes(`${pkg.name}@${pkg.version}`)).toBeTruthy() | ||
expect(lines[0].includes(pkg.author)).toBeTruthy() | ||
expect(lines[0].includes(pkg.license)).toBeTruthy() | ||
}) | ||
test('Check if cjs package info updated', () => { | ||
expect(cjsPkg.name).toEqual(pkg.name) | ||
expect(cjsPkg.version).toEqual(pkg.version) | ||
}) | ||
}) | ||
|
||
describe('Validate ESM version output', () => { | ||
test(`Check if ${esmFile} created`, () => { | ||
expect(existsSync(esmFile)).toBeTruthy() | ||
}) | ||
const constent = readFileSync(esmFile, 'utf8') | ||
const lines = constent.split('\n') | ||
test('Check if file meta contains package info', () => { | ||
expect(lines[0].includes(`${pkg.name}@${pkg.version}`)).toBeTruthy() | ||
expect(lines[0].includes(pkg.author)).toBeTruthy() | ||
expect(lines[0].includes(pkg.license)).toBeTruthy() | ||
}) | ||
}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 1,166 @@ | ||
// Type definitions for oembed-extractor | ||
// Project: https://github.com/extractus/oembed-extractor | ||
// Definitions by: BendingBender <https://github.com/BendingBender> | ||
// CodeBast4rd <https://github.com/CodeBast4rd> | ||
// Marc McIntosh <https://github.com/MarcMcIntosh> | ||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped | ||
|
||
export interface Endpoint { | ||
schemes?: string[]; | ||
url: string; | ||
formats?: string[]; // "json" "xml" | ||
discovery?: boolean; | ||
} | ||
|
||
export interface Provider { | ||
"provider_name": string; | ||
"provider_url": string; | ||
"endpoints": Endpoint[]; | ||
} | ||
|
||
export interface FindProviderResult { | ||
"fetchEndpoint": string; | ||
"provider_name": string; | ||
"provider_url": string; | ||
} | ||
|
||
/** | ||
* Basic data structure of every oembed response see https://oembed.com/ | ||
*/ | ||
export interface OembedData { | ||
type: 'rich' | 'video' | 'photo' | 'link'; | ||
version: string; | ||
/** A text title, describing the resource. */ | ||
title?: string; | ||
/** The name of the author/owner of the resource. */ | ||
author_name?: string; | ||
/** A URL for the author/owner of the resource. */ | ||
author_url?: string; | ||
/** The name of the resource provider. */ | ||
provider_name?: string; | ||
/** The url of the resource provider. */ | ||
provider_url?: string; | ||
/** The suggested cache lifetime for this resource, in seconds. Consumers may choose to use this value or not. */ | ||
cache_age?: string | number; | ||
/** | ||
* A URL to a thumbnail image representing the resource. | ||
* The thumbnail must respect any maxwidth and maxheight parameters. | ||
* If this parameter is present, thumbnail_width and thumbnail_height must also be present. | ||
*/ | ||
thumbnail_url?: string; | ||
/** | ||
* The width of the optional thumbnail. | ||
* If this parameter is present, thumbnail_url and thumbnail_height must also be present. | ||
*/ | ||
thumbnail_width?: number; | ||
/** | ||
* The height of the optional thumbnail. | ||
* If this parameter is present, thumbnail_url and thumbnail_width must also be present. | ||
*/ | ||
thumbnail_height?: number; | ||
} | ||
|
||
export interface LinkTypeData extends OembedData { | ||
readonly type: 'link'; | ||
} | ||
|
||
export interface PhotoTypeData extends OembedData { | ||
readonly type: 'photo'; | ||
/** | ||
* The source URL of the image. Consumers should be able to insert this URL into an <img> element. | ||
* Only HTTP and HTTPS URLs are valid. | ||
*/ | ||
url: string; | ||
/** The width in pixels of the image specified in the url parameter. */ | ||
width: number; | ||
/** The height in pixels of the image specified in the url parameter. */ | ||
height: number; | ||
} | ||
|
||
export interface VideoTypeData extends OembedData { | ||
readonly type: 'video'; | ||
/** | ||
* The HTML required to embed a video player. | ||
* The HTML should have no padding or margins. | ||
* Consumers may wish to load the HTML in an off-domain iframe to avoid XSS vulnerabilities. | ||
*/ | ||
html: string; | ||
/** The width in pixels required to display the HTML. */ | ||
width: number; | ||
/** The height in pixels required to display the HTML. */ | ||
height: number; | ||
} | ||
|
||
export interface RichTypeData extends OembedData { | ||
readonly type: 'rich'; | ||
/** | ||
* The HTML required to display the resource. | ||
* The HTML should have no padding or margins. | ||
* Consumers may wish to load the HTML in an off-domain iframe to avoid XSS vulnerabilities. | ||
* The markup should be valid XHTML 1.0 Basic. | ||
*/ | ||
html: string; | ||
/** The width in pixels required to display the HTML. */ | ||
width: number; | ||
/** The height in pixels required to display the HTML. */ | ||
height: number; | ||
} | ||
|
||
export interface Params { | ||
/** | ||
* max width of embed size | ||
* Default: null | ||
*/ | ||
maxwidth?: number | ||
/** | ||
* max height of embed size | ||
* Default: null | ||
*/ | ||
maxheight?: number | ||
/** | ||
* theme for the embed, such as "dark" or "light" | ||
* Default: null | ||
*/ | ||
theme?: string | ||
/** | ||
* language for the embed, e.g. "en", "fr", "vi", etc | ||
* Default: null | ||
*/ | ||
lang?: string | ||
} | ||
|
||
export interface ProxyConfig { | ||
target?: string; | ||
headers?: Record<string, string>; | ||
} | ||
|
||
export interface FetchOptions { | ||
/** | ||
* list of request headers | ||
* default: null | ||
*/ | ||
headers?: Record<string, string>; | ||
/** | ||
* the values to configure proxy | ||
* default: null | ||
*/ | ||
proxy?: ProxyConfig; | ||
/** | ||
* http proxy agent | ||
* default: null | ||
*/ | ||
agent?: object; | ||
/** | ||
* signal to terminate request | ||
* default: null | ||
*/ | ||
signal?: object; | ||
} | ||
|
||
export function extract(url: string, params?: Params, fetchOptions?: FetchOptions): Promise<OembedData>; | ||
|
||
export function hasProvider(url: string): boolean | ||
|
||
export function findProvider(url: string): FindProviderResult | ||
|
||
export function setProviderList(providers: Provider[]): void |
Oops, something went wrong.