diff --git a/.eslintignore b/.eslintignore index db4c6d9..0498e17 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,2 +1,3 @@ dist -node_modules \ No newline at end of file +node_modules +coverage \ No newline at end of file diff --git a/.eslintrc b/.eslintrc index 9df450d..d586e46 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,11 +1,7 @@ { "root": true, "parser": "@typescript-eslint/parser", - "plugins": [ - "@typescript-eslint", - "import", - "jest" - ], + "plugins": ["@typescript-eslint", "import", "jest"], "extends": [ "prettier", "plugin:prettier/recommended", @@ -19,7 +15,7 @@ "jest/globals": true }, "rules": { - "@typescript-eslint/no-var-requires":0, + "@typescript-eslint/no-var-requires": 0, "import/no-default-export": "error", "@typescript-eslint/no-unused-vars": [ "error", diff --git a/.gitignore b/.gitignore index 8545a1d..c3fbc3e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ dist node_modules coverage -.env +.env \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..0498e17 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,3 @@ +dist +node_modules +coverage \ No newline at end of file diff --git a/README.md b/README.md index 009afc5..d70e33c 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,5 @@ # Marmiton Search -## What is it + this phantom aim to search in the [marmiton](https://www.marmiton.org) website -## Return -```typescript -type Return = { - name: string; - url: string; - score: number; - commentCount: number; -} -``` \ No newline at end of file +want some [docs](./docs/modules.md) ? diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 0000000..e2ac661 --- /dev/null +++ b/docs/.nojekyll @@ -0,0 +1 @@ +TypeDoc added this file to prevent GitHub Pages from using Jekyll. You can turn off this behavior by setting the `githubPages` option to false. \ No newline at end of file diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..c69ed00 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,5 @@ +phantom-exo / [Modules](modules.md) + +# Marmiton Search + +this phantom aim to search in the [marmiton](https://www.marmiton.org) website diff --git a/docs/modules.md b/docs/modules.md new file mode 100644 index 0000000..ce4112c --- /dev/null +++ b/docs/modules.md @@ -0,0 +1,14 @@ +[phantom-exo](README.md) / Modules + +# phantom-exo + +## Table of contents + +### Modules + +- [marmiton/parsing](modules/marmiton_parsing.md) +- [marmiton/phantom](modules/marmiton_phantom.md) +- [marmiton/search](modules/marmiton_search.md) +- [marmiton/types](modules/marmiton_types.md) +- [marmiton/validate](modules/marmiton_validate.md) +- [utils/browser](modules/utils_browser.md) diff --git a/docs/modules/marmiton_parsing.md b/docs/modules/marmiton_parsing.md new file mode 100644 index 0000000..504a540 --- /dev/null +++ b/docs/modules/marmiton_parsing.md @@ -0,0 +1,34 @@ +[phantom-exo](../README.md) / [Modules](../modules.md) / marmiton/parsing + +# Module: marmiton/parsing + +## Table of contents + +### Functions + +- [scrapResultFromLink](marmiton_parsing.md#scrapresultfromlink) + +## Functions + +### scrapResultFromLink + +▸ `Const` **scrapResultFromLink**(`links`, `urlStart`): { `commentCount`: `number` ; `name`: `string` ; `score`: `number` ; `url`: `string` }[] + +function that extract content from DOM links into the marmiton search page + +#### Parameters + +| Name | Type | Description | +| :--------- | :---------- | :--------------------------------------------------------- | +| `links` | `Element`[] | scrapped dom elements representing recipes in marmiton | +| `urlStart` | `string` | url to prefix recipes links | + +#### Returns + +{ `commentCount`: `number` ; `name`: `string` ; `score`: `number` ; `url`: `string` }[] + +name, link, comments and score of recipes + +#### Defined in + +marmiton/parsing.ts:7 diff --git a/docs/modules/marmiton_phantom.md b/docs/modules/marmiton_phantom.md new file mode 100644 index 0000000..3ecbf82 --- /dev/null +++ b/docs/modules/marmiton_phantom.md @@ -0,0 +1,25 @@ +[phantom-exo](../README.md) / [Modules](../modules.md) / marmiton/phantom + +# Module: marmiton/phantom + +## Table of contents + +### Functions + +- [marmitonPhantom](marmiton_phantom.md#marmitonphantom) + +## Functions + +### marmitonPhantom + +▸ `Const` **marmitonPhantom**(): `Promise`<`never`\> + +main function to launch from phantom + +#### Returns + +`Promise`<`never`\> + +#### Defined in + +marmiton/phantom.ts:8 diff --git a/docs/modules/marmiton_search.md b/docs/modules/marmiton_search.md new file mode 100644 index 0000000..2832223 --- /dev/null +++ b/docs/modules/marmiton_search.md @@ -0,0 +1,34 @@ +[phantom-exo](../README.md) / [Modules](../modules.md) / marmiton/search + +# Module: marmiton/search + +## Table of contents + +### Functions + +- [search](marmiton_search.md#search) + +## Functions + +### search + +▸ `Const` **search**(`search`, `opts?`): `Promise`<{ `commentCount`: `number` ; `name`: `string` ; `score`: `number` ; `url`: `string` }[]\> + +function to scrap in the search response on marmiton website + +#### Parameters + +| Name | Type | Description | +| :------- | :------------------------------------------------- | :----------------------------------- | +| `search` | `string` | words to search into marmiton search | +| `opts?` | [`SearchOptions`](marmiton_types.md#searchoptions) | option to filter results | + +#### Returns + +`Promise`<{ `commentCount`: `number` ; `name`: `string` ; `score`: `number` ; `url`: `string` }[]\> + +marmiton search result + +#### Defined in + +marmiton/search.ts:32 diff --git a/docs/modules/marmiton_types.md b/docs/modules/marmiton_types.md new file mode 100644 index 0000000..7bb11d1 --- /dev/null +++ b/docs/modules/marmiton_types.md @@ -0,0 +1,83 @@ +[phantom-exo](../README.md) / [Modules](../modules.md) / marmiton/types + +# Module: marmiton/types + +## Table of contents + +### Type aliases + +- [MarmitonSearchInput](marmiton_types.md#marmitonsearchinput) +- [MarmitonSearchOutput](marmiton_types.md#marmitonsearchoutput) +- [MarmitonSearchResult](marmiton_types.md#marmitonsearchresult) +- [SearchDishType](marmiton_types.md#searchdishtype) +- [SearchOptions](marmiton_types.md#searchoptions) +- [SearchRecipeType](marmiton_types.md#searchrecipetype) + +## Type aliases + +### MarmitonSearchInput + +Ƭ **MarmitonSearchInput**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :--------------------------------------------------------------------------------------------------------------------- | +| `dt?` | [`SearchDishType`](marmiton_types.md#searchdishtype) \| [`SearchDishType`](marmiton_types.md#searchdishtype)[] | +| `page?` | `number` | +| `query` | `string` | +| `type?` | [`SearchRecipeType`](marmiton_types.md#searchrecipetype) \| [`SearchRecipeType`](marmiton_types.md#searchrecipetype)[] | + +#### Defined in + +marmiton/types.d.ts:23 + +--- + +### MarmitonSearchOutput + +Ƭ **MarmitonSearchOutput**: { `commentCount`: `number` ; `name`: `string` ; `score`: `number` ; `url`: `string` }[] + +#### Defined in + +marmiton/types.d.ts:1 + +--- + +### MarmitonSearchResult + +Ƭ **MarmitonSearchResult**: [`MarmitonSearchOutput`](marmiton_types.md#marmitonsearchoutput)[`number`] + +#### Defined in + +marmiton/types.d.ts:8 + +--- + +### SearchDishType + +Ƭ **SearchDishType**: `"entree"` \| `"platprincipal"` \| `"dessert"` \| `"amusegueule"` \| `"accompagnement"` \| `"sauce"` \| `"boisson"` \| `"confiserie"` \| `"conseil"` + +#### Defined in + +marmiton/types.d.ts:12 + +--- + +### SearchOptions + +Ƭ **SearchOptions**: `Omit`<[`MarmitonSearchInput`](marmiton_types.md#marmitonsearchinput), `"query"`\> + +#### Defined in + +marmiton/types.d.ts:30 + +--- + +### SearchRecipeType + +Ƭ **SearchRecipeType**: `"season"` \| `"recipe"` + +#### Defined in + +marmiton/types.d.ts:10 diff --git a/docs/modules/marmiton_validate.md b/docs/modules/marmiton_validate.md new file mode 100644 index 0000000..83c14c7 --- /dev/null +++ b/docs/modules/marmiton_validate.md @@ -0,0 +1,47 @@ +[phantom-exo](../README.md) / [Modules](../modules.md) / marmiton/validate + +# Module: marmiton/validate + +## Table of contents + +### Variables + +- [jsonSchema](marmiton_validate.md#jsonschema) + +### Functions + +- [validateMarmitonSearchInput](marmiton_validate.md#validatemarmitonsearchinput) + +## Variables + +### jsonSchema + +• **jsonSchema**: `any` + +#### Defined in + +marmiton/validate.ts:3 + +## Functions + +### validateMarmitonSearchInput + +▸ **validateMarmitonSearchInput**(`value`): value is MarmitonSearchInput + +validate value against json schema defined into input.json file + +#### Parameters + +| Name | Type | Description | +| :------ | :-------- | :------------- | +| `value` | `unknown` | value to check | + +#### Returns + +value is MarmitonSearchInput + +true if value is valid false otherwise + +#### Defined in + +marmiton/validate.ts:12 diff --git a/docs/modules/utils_browser.md b/docs/modules/utils_browser.md new file mode 100644 index 0000000..db7c463 --- /dev/null +++ b/docs/modules/utils_browser.md @@ -0,0 +1,100 @@ +[phantom-exo](../README.md) / [Modules](../modules.md) / utils/browser + +# Module: utils/browser + +## Table of contents + +### Functions + +- [optionsToUrlParams](utils_browser.md#optionstourlparams) +- [withBrowserOpened](utils_browser.md#withbrowseropened) +- [withPageOpened](utils_browser.md#withpageopened) + +## Functions + +### optionsToUrlParams + +▸ `Const` **optionsToUrlParams**<`T`, `V`\>(`opts`, `whitelist`): `string` + +transform object to url parameters +array will write multiple time the same argument name + +#### Type parameters + +| Name | Type | +| :--- | :--------------------------------------- | +| `T` | `T` | +| `V` | extends `string` \| `number` \| `symbol` | + +#### Parameters + +| Name | Type | Description | +| :---------- | :---- | :----------------------- | +| `opts` | `T` | object to transform | +| `whitelist` | `V`[] | key to write from object | + +#### Returns + +`string` + +#### Defined in + +utils/browser.ts:50 + +--- + +### withBrowserOpened + +▸ `Const` **withBrowserOpened**<`T`\>(`func`): `Promise`<`T`\> + +open a browser with puppeteer and call the parameter function within it +the browser will be closed after func execution + +#### Type parameters + +| Name | +| :--- | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :----- | :---------------------------------------- | :------------------------------------------------------------------ | +| `func` | (`browser`: `Browser`) => `Promise`<`T`\> | function to execute after opening the browser and before closing it | + +#### Returns + +`Promise`<`T`\> + +#### Defined in + +utils/browser.ts:9 + +--- + +### withPageOpened + +▸ `Const` **withPageOpened**<`T`\>(`func`): `Promise`<`T`\> + +open a page with puppeteer and call the parameter function within it +the page will be closed after func execution + +#### Type parameters + +| Name | +| :--- | +| `T` | + +#### Parameters + +| Name | Type | Description | +| :----- | :---------------------------------- | :------------------------------------------------------------- | +| `func` | (`page`: `Page`) => `Promise`<`T`\> | function to execute after opening a page and before closing it | + +#### Returns + +`Promise`<`T`\> + +#### Defined in + +utils/browser.ts:29 diff --git a/package-lock.json b/package-lock.json index 823dee5..f2c42ed 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1651,6 +1651,12 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1741,6 +1747,15 @@ "integrity": "sha512-WfrtPEoNSoeATDlf4y3QvkwiELl9GyPLISV5GejTbbQRtQx4LhsXmc9IQ6XCL2d7UxCyEzToEZNMeqR79OUw8Q==", "dev": true }, + "catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, "center-align": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", @@ -2135,6 +2150,12 @@ "ansi-colors": "^4.1.1" } }, + "entities": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", + "dev": true + }, "envinfo": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", @@ -2877,6 +2898,27 @@ "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", "dev": true }, + "handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -3832,6 +3874,45 @@ "argparse": "^2.0.1" } }, + "js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "dev": true, + "requires": { + "xmlcreate": "^2.0.4" + } + }, + "jsdoc": { + "version": "3.6.7", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.7.tgz", + "integrity": "sha512-sxKt7h0vzCd+3Y81Ey2qinupL6DpRSZJclS04ugHDNmRUXGzqicMJ6iwayhSA0S0DwwX30c5ozyUthr1QKF6uw==", + "dev": true, + "requires": { + "@babel/parser": "^7.9.4", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.1", + "klaw": "^3.0.0", + "markdown-it": "^10.0.0", + "markdown-it-anchor": "^5.2.7", + "marked": "^2.0.3", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "taffydb": "2.6.2", + "underscore": "~1.13.1" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, "jsdom": { "version": "16.7.0", "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.7.0.tgz", @@ -3900,6 +3981,12 @@ "minimist": "^1.2.0" } }, + "jsonc-parser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.0.0.tgz", + "integrity": "sha512-fQzRfAbIBnR0IQvftw9FJveWiHp72Fg20giDrHz6TdfB12UH/uue0D3hm57UB5KgAVuniLMCaS8P1IMj9NR7cA==", + "dev": true + }, "jsonpointer": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.0.tgz", @@ -3912,6 +3999,15 @@ "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, + "klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -3949,6 +4045,15 @@ "type-check": "~0.4.0" } }, + "linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, "loader-runner": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", @@ -3998,6 +4103,12 @@ "yallist": "^4.0.0" } }, + "lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "dev": true + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -4030,6 +4141,48 @@ "tmpl": "1.0.5" } }, + "markdown-it": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", + "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "entities": "~2.0.0", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + } + } + }, + "markdown-it-anchor": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.3.0.tgz", + "integrity": "sha512-/V1MnLL/rgJ3jkMWo84UR+K+jF1cxNG1a+KwqeXqTIJ+jtA8aWSHuigx8lTzauiIjBDbwF3NcWQMotd0Dm39jA==", + "dev": true + }, + "marked": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz", + "integrity": "sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA==", + "dev": true + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -4088,6 +4241,12 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -4569,6 +4728,15 @@ "editions": "^2.2.0" } }, + "requizzle": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", + "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, "resolve": { "version": "1.21.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", @@ -4726,6 +4894,17 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, + "shiki": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.9.15.tgz", + "integrity": "sha512-/Y0z9IzhJ8nD9nbceORCqu6NgT9X6I8Fk8c3SICHI5NbZRLdZYFaB233gwct9sU0vvSypyaL/qaKvzyQGJBZSw==", + "dev": true, + "requires": { + "jsonc-parser": "^3.0.0", + "vscode-oniguruma": "^1.6.1", + "vscode-textmate": "5.2.0" + } + }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -4893,6 +5072,12 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "taffydb": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", + "dev": true + }, "tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -5130,12 +5315,55 @@ "is-typedarray": "^1.0.0" } }, + "typedoc": { + "version": "0.22.10", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.10.tgz", + "integrity": "sha512-hQYZ4WtoMZ61wDC6w10kxA42+jclWngdmztNZsDvIz7BMJg7F2xnT+uYsUa7OluyKossdFj9E9Ye4QOZKTy8SA==", + "dev": true, + "requires": { + "glob": "^7.2.0", + "lunr": "^2.3.9", + "marked": "^3.0.8", + "minimatch": "^3.0.4", + "shiki": "^0.9.12" + }, + "dependencies": { + "marked": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/marked/-/marked-3.0.8.tgz", + "integrity": "sha512-0gVrAjo5m0VZSJb4rpL59K1unJAMb/hm8HRXqasD8VeC8m91ytDPMritgFSlKonfdt+rRYYpP/JfLxgIX8yoSw==", + "dev": true + } + } + }, + "typedoc-plugin-markdown": { + "version": "3.11.9", + "resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.11.9.tgz", + "integrity": "sha512-wgJWPfq2wXMktfeBBx1ZObQw2a02Qz0F67juYt6urCY9PYpAX38XcB2d2Nb4grymn95X/ThwtU5PaK2eWyq7AQ==", + "dev": true, + "requires": { + "handlebars": "^4.7.7" + } + }, "typescript": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", "dev": true }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "uglify-js": { + "version": "3.14.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", + "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", + "dev": true, + "optional": true + }, "unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", @@ -5148,6 +5376,12 @@ "which-boxed-primitive": "^1.0.2" } }, + "underscore": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz", + "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==", + "dev": true + }, "universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", @@ -5205,6 +5439,18 @@ } } }, + "vscode-oniguruma": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.6.1.tgz", + "integrity": "sha512-vc4WhSIaVpgJ0jJIejjYxPvURJavX6QG41vu0mGhqywMkQqulezEqEQ3cO3gc8GvcOpX6ycmKGqRoROEMBNXTQ==", + "dev": true + }, + "vscode-textmate": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", + "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "dev": true + }, "w3c-hr-time": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", @@ -5443,6 +5689,12 @@ "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", "dev": true }, + "xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", + "dev": true + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index e2d4ea1..e13254f 100644 --- a/package.json +++ b/package.json @@ -4,12 +4,13 @@ "description": "", "main": "index.js", "scripts": { - "lint:fix": "eslint . --fix --quiet", - "lint": "eslint . --max-warnings 0", + "lint:fix": "prettier . --write && eslint . --fix --quiet", + "lint": "prettier . --check && eslint . --max-warnings 0", "test": "jest", "watch": "webpack --watch", "auto-deploy": "phantombuster", - "online": "ts-node ./scripts/test_online.ts" + "online": "ts-node ./scripts/test_online.ts", + "doc": "typedoc" }, "engines": { "node": "14.x" @@ -34,6 +35,7 @@ "eslint-plugin-prettier": "^4.0.0", "fs": "0.0.1-security", "jest": "^27.4.7", + "jsdoc": "^3.6.7", "path": "^0.12.7", "phantombuster-sdk": "^0.3.3", "prettier": "^2.5.1", @@ -41,6 +43,8 @@ "ts-jest": "^27.1.2", "ts-loader": "^9.2.6", "ts-node": "^10.4.0", + "typedoc": "^0.22.10", + "typedoc-plugin-markdown": "^3.11.9", "typescript": "^4.5.4", "webpack": "^5.65.0", "webpack-cli": "^4.9.1" diff --git a/src/marmiton/index.ts b/src/marmiton/index.ts index 08d6f99..b7ffa77 100644 --- a/src/marmiton/index.ts +++ b/src/marmiton/index.ts @@ -1,7 +1,7 @@ /* eslint-disable */ // Phantombuster configuration { - "phantombuster command: nodejs" - "phantombuster package: 5" +"phantombuster command: nodejs"; +"phantombuster package: 5"; // } /* eslint-enable */ diff --git a/src/marmiton/input.json b/src/marmiton/input.json index 8cde2ea..903483d 100644 --- a/src/marmiton/input.json +++ b/src/marmiton/input.json @@ -50,18 +50,12 @@ "type": { "anyOf": [ { - "enum": [ - "season", - "recipe" - ], + "enum": ["season", "recipe"], "type": "string" }, { "items": { - "enum": [ - "season", - "recipe" - ], + "enum": ["season", "recipe"], "type": "string" }, "type": "array" @@ -69,10 +63,8 @@ ] } }, - "required": [ - "query" - ], + "required": ["query"], "type": "object" } } -} \ No newline at end of file +} diff --git a/src/marmiton/output.json b/src/marmiton/output.json index 8f6a4d6..4776fc3 100644 --- a/src/marmiton/output.json +++ b/src/marmiton/output.json @@ -19,15 +19,10 @@ "type": "string" } }, - "required": [ - "name", - "url", - "score", - "commentCount" - ], + "required": ["name", "url", "score", "commentCount"], "type": "object" }, "type": "array" } } -} \ No newline at end of file +} diff --git a/tsconfig.json b/tsconfig.json index cacc92e..d60b69e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,16 +1,16 @@ { "compilerOptions": { - "moduleResolution": "node", - "target": "es5", - "module": "CommonJS", - "outDir": "dist", - "lib": ["dom", "es2015"], - "esModuleInterop": true, - "strict": true, - "noImplicitAny": true, - "strictNullChecks": true, - "strictFunctionTypes": true, - "alwaysStrict": true, + "moduleResolution": "node", + "target": "es5", + "module": "CommonJS", + "outDir": "dist", + "lib": ["dom", "es2015"], + "esModuleInterop": true, + "strict": true, + "noImplicitAny": true, + "strictNullChecks": true, + "strictFunctionTypes": true, + "alwaysStrict": true }, "include": ["./src"] -} \ No newline at end of file +} diff --git a/typedoc.json b/typedoc.json new file mode 100644 index 0000000..a1d5594 --- /dev/null +++ b/typedoc.json @@ -0,0 +1,12 @@ +{ + "entryPoints": [ + "src/marmiton/index.ts", + "src/marmiton/parsing.ts", + "src/marmiton/phantom.ts", + "src/marmiton/search.ts", + "src/marmiton/types.d.ts", + "src/marmiton/validate.ts", + "src/utils/browser.ts" + ], + "out": "docs" +}