@zentered/issue-forms-body-parser 1.4.4 → 1.4.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.nyc_output/{3fabb32d-040c-4633-9bb7-f2949a4f083b.json → 2916b542-f566-41d4-a444-fb59122ef74f.json} +0 -0
- package/.nyc_output/{aa46d5ef-875b-478e-b87f-8633377748e7.json → 83abefec-b897-40bc-a4d5-0a1bfe6cc9d6.json} +0 -0
- package/.nyc_output/processinfo/2916b542-f566-41d4-a444-fb59122ef74f.json +1 -0
- package/.nyc_output/processinfo/{3fabb32d-040c-4633-9bb7-f2949a4f083b.json → 83abefec-b897-40bc-a4d5-0a1bfe6cc9d6.json} +1 -1
- package/.nyc_output/processinfo/index.json +1 -1
- package/package.json +6 -6
- package/pkg/parse.cjs +1 -1
- package/pkg/parse.cjs.map +1 -1
- package/pkg/parse.js +1 -1
- package/pkg/parse.js.map +1 -1
- package/pkg/parse.modern.js +1 -1
- package/pkg/parse.modern.js.map +1 -1
- package/pkg/parse.umd.js +1 -1
- package/pkg/parse.umd.js.map +1 -1
- package/src/parse.js +6 -1
- package/.nyc_output/processinfo/aa46d5ef-875b-478e-b87f-8633377748e7.json +0 -1
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"parent":"83abefec-b897-40bc-a4d5-0a1bfe6cc9d6","pid":1895,"argv":["/usr/local/bin/node","/home/runner/work/issue-forms-body-parser/issue-forms-body-parser/test/parse-issue.test.js"],"execArgv":["--experimental-json-modules"],"cwd":"/home/runner/work/issue-forms-body-parser/issue-forms-body-parser","time":1659383682150,"ppid":1884,"coverageFilename":"/home/runner/work/issue-forms-body-parser/issue-forms-body-parser/.nyc_output/2916b542-f566-41d4-a444-fb59122ef74f.json","externalId":"test/parse-issue.test.js","uuid":"2916b542-f566-41d4-a444-fb59122ef74f","files":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"parent":null,"pid":
|
|
1
|
+
{"parent":null,"pid":1884,"argv":["/usr/local/bin/node","/home/runner/work/issue-forms-body-parser/issue-forms-body-parser/node_modules/.bin/tap","--node-arg=--experimental-json-modules","--test-env=GITHUB_REPOSITORY=zentered/issue-forms-body-parser-test","-J","test/parse-issue.test.js"],"execArgv":[],"cwd":"/home/runner/work/issue-forms-body-parser/issue-forms-body-parser","time":1659383681796,"ppid":1873,"coverageFilename":"/home/runner/work/issue-forms-body-parser/issue-forms-body-parser/.nyc_output/83abefec-b897-40bc-a4d5-0a1bfe6cc9d6.json","externalId":"","uuid":"83abefec-b897-40bc-a4d5-0a1bfe6cc9d6","files":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"processes":{"
|
|
1
|
+
{"processes":{"2916b542-f566-41d4-a444-fb59122ef74f":{"parent":"83abefec-b897-40bc-a4d5-0a1bfe6cc9d6","externalId":"test/parse-issue.test.js","children":[]},"83abefec-b897-40bc-a4d5-0a1bfe6cc9d6":{"parent":null,"children":["2916b542-f566-41d4-a444-fb59122ef74f"]}},"files":{},"externalIds":{"test/parse-issue.test.js":{"root":"2916b542-f566-41d4-a444-fb59122ef74f","children":[]}}}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zentered/issue-forms-body-parser",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.5",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Parser for GitHub Issue Form body, also available as GitHub Action",
|
|
6
6
|
"keywords": [
|
|
@@ -65,8 +65,8 @@
|
|
|
65
65
|
"@actions/core": "^1.9.0",
|
|
66
66
|
"@actions/github": "^5.0.3",
|
|
67
67
|
"@sindresorhus/slugify": "^2.1.0",
|
|
68
|
-
"date-fns": "^2.
|
|
69
|
-
"date-fns-tz": "^1.3.
|
|
68
|
+
"date-fns": "^2.29.1",
|
|
69
|
+
"date-fns-tz": "^1.3.6",
|
|
70
70
|
"remark-gfm": "^3.0.1",
|
|
71
71
|
"remark-parse": "^10.0.1",
|
|
72
72
|
"remark-stringify": "^10.0.2",
|
|
@@ -74,10 +74,10 @@
|
|
|
74
74
|
"unified": "^10.1.2"
|
|
75
75
|
},
|
|
76
76
|
"devDependencies": {
|
|
77
|
-
"@commitlint/config-conventional": "^17.0.
|
|
77
|
+
"@commitlint/config-conventional": "^17.0.3",
|
|
78
78
|
"@vercel/ncc": "^0.34.0",
|
|
79
|
-
"commitlint": "^17.0.
|
|
80
|
-
"eslint": "^8.
|
|
79
|
+
"commitlint": "^17.0.3",
|
|
80
|
+
"eslint": "^8.20.0",
|
|
81
81
|
"eslint-plugin-json": "^3.1.0",
|
|
82
82
|
"eslint-plugin-node": "^11.1.0",
|
|
83
83
|
"husky": "^8.0.1",
|
package/pkg/parse.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=require("unified"),n=require("remark-parse"),t=require("remark-gfm"),r=require("@sindresorhus/slugify"),i=require("remark-stringify"),u=require("strip-final-newline"),o=require("date-fns"),a=require("date-fns-tz/esm");function f(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=/*#__PURE__*/f(n),c=/*#__PURE__*/f(t),d=/*#__PURE__*/f(r),h=/*#__PURE__*/f(i),s=/*#__PURE__*/f(u);function y(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}var v=["yyyy-MM-dd","dd/MM/yyyy","dd/MM/yy","dd-MM-yyyy","dd-MM-yy","dd.MM.yyyy","dd.MM.yy"],m=["HH:mm","HH.mm","hh:mm a","hh:mm A"],p=function e(n){return n.children.map(function(t){var r={};return"list"===t.type?e(n):"listItem"===t.type?(r.checked=t.checked,t.children.map(function(e){if("paragraph"===e.type)return r.text=e.children.map(function(e){return"link"===e.type?e.children[0].value:e.value}).filter(function(e){return!!e}).join(""),r}).filter(function(e){return!!e})):void 0}).filter(function(e){return!!e})};function g(e,n,t){if(!e.s){if(t instanceof b){if(!t.s)return void(t.o=g.bind(null,e,n));1&n&&(n=t.s),t=t.v}if(t&&t.then)return void t.then(g.bind(null,e,n),g.bind(null,e,2));e.s=n,e.v=t;var r=e.o;r&&r(e)}}const b=/*#__PURE__*/function(){function e(){}return e.prototype.then=function(n,t){const r=new e,i=this.s;if(i){const e=1&i?n:t;if(e){try{g(r,1,e(this.v))}catch(e){g(r,2,e)}return r}return this}return this.o=function(e){try{const i=e.v;1&e.s?g(r,1,n?n(i):i):t?g(r,1,t(i)):g(r,2,i)}catch(e){g(r,2,e)}},r},e}();function M(e){return e instanceof b&&1&e.s}module.exports=function(n){try{var t,r,i,u,f,x,w,T,k,q,I,j
|
|
1
|
+
var e=require("unified"),n=require("remark-parse"),t=require("remark-gfm"),r=require("@sindresorhus/slugify"),i=require("remark-stringify"),u=require("strip-final-newline"),o=require("date-fns"),a=require("date-fns-tz/esm");function f(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=/*#__PURE__*/f(n),c=/*#__PURE__*/f(t),d=/*#__PURE__*/f(r),h=/*#__PURE__*/f(i),s=/*#__PURE__*/f(u);function y(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}var v=["yyyy-MM-dd","dd/MM/yyyy","dd/MM/yy","dd-MM-yyyy","dd-MM-yy","dd.MM.yyyy","dd.MM.yy"],m=["HH:mm","HH.mm","hh:mm a","hh:mm A"],p=function e(n){return n.children.map(function(t){var r={};return"list"===t.type?e(n):"listItem"===t.type?(r.checked=t.checked,t.children.map(function(e){if("paragraph"===e.type)return r.text=e.children.map(function(e){return"link"===e.type?e.children[0].value:e.value}).filter(function(e){return!!e}).join(""),r}).filter(function(e){return!!e})):void 0}).filter(function(e){return!!e})};function g(e,n,t){if(!e.s){if(t instanceof b){if(!t.s)return void(t.o=g.bind(null,e,n));1&n&&(n=t.s),t=t.v}if(t&&t.then)return void t.then(g.bind(null,e,n),g.bind(null,e,2));e.s=n,e.v=t;var r=e.o;r&&r(e)}}const b=/*#__PURE__*/function(){function e(){}return e.prototype.then=function(n,t){const r=new e,i=this.s;if(i){const e=1&i?n:t;if(e){try{g(r,1,e(this.v))}catch(e){g(r,2,e)}return r}return this}return this.o=function(e){try{const i=e.v;1&e.s?g(r,1,n?n(i):i):t?g(r,1,t(i)):g(r,2,i)}catch(e){g(r,2,e)}},r},e}();function M(e){return e instanceof b&&1&e.s}module.exports=function(n){try{var t,r,i,u,f,x,w,T,k,q,I,O,j;return Promise.resolve(e.unified().use(l.default).use(c.default).parse(n)).then(function(n){function l(){for(I in A)(j=(O=A[I]).content.filter(Boolean))&&j.length>0&&(1===j.length&&(O.text=j[0]),O.text=j.join("\n\n")),O.content=j;return A}if(!n)return[];var A={},H=null;t=function(e,n){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(t)return(t=t.call(e)).next.bind(t);if(Array.isArray(e)||(t=function(e,n){if(e){if("string"==typeof e)return y(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?y(e,n):void 0}}(e))){t&&(e=t);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(n.children);var S=function(e,n,t){for(var r;;){var i=e();if(M(i)&&(i=i.v),!i)return u;if(i.then){r=0;break}var u=t();if(u&&u.then){if(!M(u)){r=1;break}u=u.s}}var o=new b,a=g.bind(null,o,2);return(0===r?i.then(l):1===r?u.then(f):(void 0).then(function(){(i=e())?i.then?i.then(l).then(void 0,a):l(i):g(o,1,u)})).then(void 0,a),o;function f(n){u=n;do{if(!(i=e())||M(i)&&!i.v)return void g(o,1,u);if(i.then)return void i.then(l).then(void 0,a);M(u=t())&&(u=u.v)}while(!u||!u.then);u.then(f).then(void 0,a)}function l(e){e?(u=t())&&u.then?u.then(f).then(void 0,a):f(u):g(o,1,u)}}(function(){return!(r=t()).done},0,function(){return i=r.value,Promise.resolve(e.unified().use(c.default).use(h.default).stringify(i)).then(function(e){var n,t;(u=s.default(e)).indexOf("\\_")>-1&&(u=u.replace(/\\_/g,"_")),"heading"===i.type&&3===i.depth?(H=d.default(i.children[0].value),A[H]={title:i.children[0].value,content:[]}):"paragraph"===i.type&&H?(f=A[H],n=u,t=v.map(function(e){return o.isMatch(n,e)}),x=t.indexOf(!0)>-1?a.zonedTimeToUtc(o.parse(n,v[t.indexOf(!0)],new Date),"UTC").toJSON().split("T")[0]:null,w=function(e){var n=m.map(function(n){return o.isMatch(e,n)});if(n.indexOf(!0)>-1){var t=a.zonedTimeToUtc(o.parse(e,m[n.indexOf(!0)],new Date),"UTC");return a.formatInTimeZone(t,"UTC","HH:mm")}return null}(u),T=function(e){var n=!1,t={hours:0,minutes:0},r=new RegExp(/([0-9]+)h([0-9]+)m/),i=new RegExp(/([0-9]+)h/);if(e.match(r)){n=!0;var u=e.match(r),o=u[2];t.hours=parseInt(u[1]),t.minutes=parseInt(o)}else if(e.match(i)){n=!0;var a=e.match(i);t.hours=parseInt(a[1]),t.minutes=0}return n?t:null}(u),x&&(f.date=x),w&&(f.time=w),T&&(f.duration=T),f.content.push(u)):"list"===i.type?((k=A[H]).text=u,k.list=p(i).flat()):"html"===i.type?A[H].content.push(i.html):"code"===i.type?((q=A[H]).lang=i.lang,q.text=u):"heading"===i.type&&i.depth>3?A[H].content.push(i.children[0].value):(console.log("unhandled token type"),console.log(i))})});return S&&S.then?S.then(l):l()})}catch(e){return Promise.reject(e)}};
|
|
2
2
|
//# sourceMappingURL=parse.cjs.map
|
package/pkg/parse.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.cjs","sources":["../src/parsers/date.js","../src/parsers/time.js","../src/parsers/index.js","../src/parsers/list.js","../src/parse.js","../src/parsers/duration.js"],"sourcesContent":["'use strict'\n\nimport { parse, isMatch } from 'date-fns'\nimport { zonedTimeToUtc } from 'date-fns-tz/esm'\n\nconst loc = 'UTC'\nconst commonDateFormats = [\n 'yyyy-MM-dd',\n 'dd/MM/yyyy',\n 'dd/MM/yy',\n 'dd-MM-yyyy',\n 'dd-MM-yy',\n 'dd.MM.yyyy',\n 'dd.MM.yy'\n]\n\nexport default function parseDate(text) {\n const match = commonDateFormats.map((format) => {\n return isMatch(text, format)\n })\n if (match.indexOf(true) > -1) {\n const date = zonedTimeToUtc(\n parse(text, commonDateFormats[match.indexOf(true)], new Date()),\n loc\n ).toJSON()\n return date.split('T')[0]\n } else {\n return null\n }\n}\n","'use strict'\n\nimport { parse, isMatch } from 'date-fns'\nimport { zonedTimeToUtc, formatInTimeZone } from 'date-fns-tz/esm'\n\nconst loc = 'UTC'\nconst commonTimeFormats = ['HH:mm', 'HH.mm', 'hh:mm a', 'hh:mm A']\n\nexport default function parseTime(text) {\n const match = commonTimeFormats.map((format) => {\n return isMatch(text, format)\n })\n if (match.indexOf(true) > -1) {\n const time = zonedTimeToUtc(\n parse(text, commonTimeFormats[match.indexOf(true)], new Date()),\n loc\n )\n return formatInTimeZone(time, loc, 'HH:mm')\n } else {\n return null\n }\n}\n","'use strict'\n\nimport date from './date.js'\nimport time from './time.js'\nimport duration from './duration.js'\nimport list from './list.js'\n\nexport const parseDate = date\nexport const parseTime = time\nexport const parseDuration = duration\nexport const parseList = list\n","'use strict'\n\nexport default function parseList(list) {\n return list.children\n .map((item) => {\n const listItem = {}\n if (item.type === 'list') {\n return parseList(list)\n } else if (item.type === 'listItem') {\n listItem.checked = item.checked\n return item.children\n .map((child) => {\n if (child.type === 'paragraph') {\n listItem.text = child.children\n .map((c) => {\n if (c.type === 'link') {\n return c.children[0].value\n } else {\n return c.value\n }\n })\n .filter((x) => !!x)\n .join('')\n return listItem\n }\n })\n .filter((x) => !!x)\n }\n })\n .filter((x) => !!x)\n}\n","'use strict'\n\nimport { unified } from 'unified'\nimport remarkParse from 'remark-parse'\nimport remarkGfm from 'remark-gfm'\nimport slugify from '@sindresorhus/slugify'\nimport remarkStringify from 'remark-stringify'\nimport stripFinalNewline from 'strip-final-newline'\n\nimport {\n parseDate,\n parseTime,\n parseDuration,\n parseList\n} from './parsers/index.js'\n\nexport default async function parseMD(body) {\n const tokens = await unified().use(remarkParse).use(remarkGfm).parse(body)\n if (!tokens) {\n return []\n }\n\n const structuredResponse = {}\n let currentHeading = null\n for (const token of tokens.children) {\n const text = await unified()\n .use(remarkGfm)\n .use(remarkStringify)\n .stringify(token)\n const cleanText = stripFinalNewline(text)\n\n // issue forms uses h3 as a heading\n if (token.type === 'heading' && token.depth === 3) {\n currentHeading = slugify(token.children[0].value)\n structuredResponse[currentHeading] = {\n title: token.children[0].value,\n content: []\n }\n } else if (token.type === 'paragraph' && currentHeading) {\n const obj = structuredResponse[currentHeading]\n\n const date = parseDate(cleanText)\n const time = parseTime(cleanText)\n const duration = parseDuration(cleanText)\n\n if (date) {\n obj.date = date\n }\n\n if (time) {\n obj.time = time\n }\n\n if (duration) {\n obj.duration = duration\n }\n\n obj.content.push(cleanText)\n } else if (token.type === 'list') {\n const obj = structuredResponse[currentHeading]\n obj.text = cleanText\n obj.list = parseList(token).flat()\n } else if (token.type === 'html') {\n const obj = structuredResponse[currentHeading]\n obj.content.push(token.html)\n } else if (token.type === 'code') {\n const obj = structuredResponse[currentHeading]\n obj.lang = token.lang\n obj.text = cleanText\n } else if (token.type === 'heading' && token.depth > 3) {\n const obj = structuredResponse[currentHeading]\n obj.content.push(token.children[0].value)\n } else {\n console.log('unhandled token type')\n console.log(token)\n }\n }\n\n for (const key in structuredResponse) {\n const token = structuredResponse[key]\n const content = token.content.filter(Boolean)\n if (content && content.length > 0) {\n if (content.length === 1) {\n token.text = content[0]\n }\n token.text = content.join('\\n\\n')\n }\n token.content = content\n }\n\n return structuredResponse\n}\n","'use strict'\n\nexport default function parseDuration(text) {\n let matched = false\n const duration = {\n hours: 0,\n minutes: 0\n }\n\n const hoursAndMinutes = new RegExp(/([0-9]+)h([0-9]+)m/)\n const hours = new RegExp(/([0-9]+)h/)\n\n if (text.match(hoursAndMinutes)) {\n matched = true\n const [, h, m] = text.match(hoursAndMinutes)\n duration.hours = parseInt(h)\n duration.minutes = parseInt(m)\n } else if (text.match(hours)) {\n matched = true\n const [, h] = text.match(hours)\n duration.hours = parseInt(h)\n duration.minutes = 0\n }\n\n if (matched) {\n return duration\n } else {\n return null\n }\n}\n"],"names":["commonDateFormats","commonTimeFormats","parseList","list","children","map","item","listItem","type","checked","child","text","c","value","filter","x","join","_settle","pact","state","s","_Pact","o","bind","v","then","observer","prototype","onFulfilled","onRejected","result","this","callback","e","_this","thenable","body","token","cleanText","obj","date","time","duration","key","content","unified","use","remarkParse","remarkGfm","parse","tokens","_temp2","structuredResponse","Boolean","length","currentHeading","_iterator","test","update","stage","shouldContinue","_isSettledPact","reject","_resumeAfterTest","_resumeAfterBody","updateValue","remarkStringify","stringify","match","stripFinalNewline","depth","slugify","title","format","isMatch","indexOf","zonedTimeToUtc","Date","toJSON","split","parseTime","formatInTimeZone","matched","hours","minutes","hoursAndMinutes","RegExp","_text$match","m","parseInt","parseDuration","push","flat","html","lang","console","log","_temp"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parse.cjs","sources":["../src/parsers/date.js","../src/parsers/time.js","../src/parsers/index.js","../src/parsers/list.js","../src/parse.js","../src/parsers/duration.js"],"sourcesContent":["'use strict'\n\nimport { parse, isMatch } from 'date-fns'\nimport { zonedTimeToUtc } from 'date-fns-tz/esm'\n\nconst loc = 'UTC'\nconst commonDateFormats = [\n 'yyyy-MM-dd',\n 'dd/MM/yyyy',\n 'dd/MM/yy',\n 'dd-MM-yyyy',\n 'dd-MM-yy',\n 'dd.MM.yyyy',\n 'dd.MM.yy'\n]\n\nexport default function parseDate(text) {\n const match = commonDateFormats.map((format) => {\n return isMatch(text, format)\n })\n if (match.indexOf(true) > -1) {\n const date = zonedTimeToUtc(\n parse(text, commonDateFormats[match.indexOf(true)], new Date()),\n loc\n ).toJSON()\n return date.split('T')[0]\n } else {\n return null\n }\n}\n","'use strict'\n\nimport { parse, isMatch } from 'date-fns'\nimport { zonedTimeToUtc, formatInTimeZone } from 'date-fns-tz/esm'\n\nconst loc = 'UTC'\nconst commonTimeFormats = ['HH:mm', 'HH.mm', 'hh:mm a', 'hh:mm A']\n\nexport default function parseTime(text) {\n const match = commonTimeFormats.map((format) => {\n return isMatch(text, format)\n })\n if (match.indexOf(true) > -1) {\n const time = zonedTimeToUtc(\n parse(text, commonTimeFormats[match.indexOf(true)], new Date()),\n loc\n )\n return formatInTimeZone(time, loc, 'HH:mm')\n } else {\n return null\n }\n}\n","'use strict'\n\nimport date from './date.js'\nimport time from './time.js'\nimport duration from './duration.js'\nimport list from './list.js'\n\nexport const parseDate = date\nexport const parseTime = time\nexport const parseDuration = duration\nexport const parseList = list\n","'use strict'\n\nexport default function parseList(list) {\n return list.children\n .map((item) => {\n const listItem = {}\n if (item.type === 'list') {\n return parseList(list)\n } else if (item.type === 'listItem') {\n listItem.checked = item.checked\n return item.children\n .map((child) => {\n if (child.type === 'paragraph') {\n listItem.text = child.children\n .map((c) => {\n if (c.type === 'link') {\n return c.children[0].value\n } else {\n return c.value\n }\n })\n .filter((x) => !!x)\n .join('')\n return listItem\n }\n })\n .filter((x) => !!x)\n }\n })\n .filter((x) => !!x)\n}\n","'use strict'\n\nimport { unified } from 'unified'\nimport remarkParse from 'remark-parse'\nimport remarkGfm from 'remark-gfm'\nimport slugify from '@sindresorhus/slugify'\nimport remarkStringify from 'remark-stringify'\nimport stripFinalNewline from 'strip-final-newline'\n\nimport {\n parseDate,\n parseTime,\n parseDuration,\n parseList\n} from './parsers/index.js'\n\nexport default async function parseMD(body) {\n const tokens = await unified().use(remarkParse).use(remarkGfm).parse(body)\n if (!tokens) {\n return []\n }\n\n const structuredResponse = {}\n let currentHeading = null\n for (const token of tokens.children) {\n const text = await unified()\n .use(remarkGfm)\n .use(remarkStringify)\n .stringify(token)\n let cleanText = stripFinalNewline(text)\n\n // remove `\\\\_`\n if (cleanText.indexOf('\\\\_') > -1) {\n cleanText = cleanText.replace(/\\\\_/g, '_')\n }\n\n // issue forms uses h3 as a heading\n if (token.type === 'heading' && token.depth === 3) {\n currentHeading = slugify(token.children[0].value)\n structuredResponse[currentHeading] = {\n title: token.children[0].value,\n content: []\n }\n } else if (token.type === 'paragraph' && currentHeading) {\n const obj = structuredResponse[currentHeading]\n\n const date = parseDate(cleanText)\n const time = parseTime(cleanText)\n const duration = parseDuration(cleanText)\n\n if (date) {\n obj.date = date\n }\n\n if (time) {\n obj.time = time\n }\n\n if (duration) {\n obj.duration = duration\n }\n\n obj.content.push(cleanText)\n } else if (token.type === 'list') {\n const obj = structuredResponse[currentHeading]\n obj.text = cleanText\n obj.list = parseList(token).flat()\n } else if (token.type === 'html') {\n const obj = structuredResponse[currentHeading]\n obj.content.push(token.html)\n } else if (token.type === 'code') {\n const obj = structuredResponse[currentHeading]\n obj.lang = token.lang\n obj.text = cleanText\n } else if (token.type === 'heading' && token.depth > 3) {\n const obj = structuredResponse[currentHeading]\n obj.content.push(token.children[0].value)\n } else {\n console.log('unhandled token type')\n console.log(token)\n }\n }\n\n for (const key in structuredResponse) {\n const token = structuredResponse[key]\n const content = token.content.filter(Boolean)\n if (content && content.length > 0) {\n if (content.length === 1) {\n token.text = content[0]\n }\n token.text = content.join('\\n\\n')\n }\n token.content = content\n }\n\n return structuredResponse\n}\n","'use strict'\n\nexport default function parseDuration(text) {\n let matched = false\n const duration = {\n hours: 0,\n minutes: 0\n }\n\n const hoursAndMinutes = new RegExp(/([0-9]+)h([0-9]+)m/)\n const hours = new RegExp(/([0-9]+)h/)\n\n if (text.match(hoursAndMinutes)) {\n matched = true\n const [, h, m] = text.match(hoursAndMinutes)\n duration.hours = parseInt(h)\n duration.minutes = parseInt(m)\n } else if (text.match(hours)) {\n matched = true\n const [, h] = text.match(hours)\n duration.hours = parseInt(h)\n duration.minutes = 0\n }\n\n if (matched) {\n return duration\n } else {\n return null\n }\n}\n"],"names":["commonDateFormats","commonTimeFormats","parseList","list","children","map","item","listItem","type","checked","child","text","c","value","filter","x","join","_settle","pact","state","s","_Pact","o","bind","v","then","observer","prototype","onFulfilled","onRejected","result","this","callback","e","_this","thenable","body","token","cleanText","obj","date","time","duration","key","content","Promise","resolve","unified","use","remarkParse","remarkGfm","parse","tokens","_temp2","structuredResponse","Boolean","length","currentHeading","_iterator","_createForOfIteratorHelperLoose","_temp","test","update","stage","shouldContinue","_isSettledPact","reject","_resumeAfterTest","_resumeAfterBody","updateValue","_for","_step","done","remarkStringify","stringify","match","stripFinalNewline","indexOf","replace","depth","slugify","title","format","isMatch","zonedTimeToUtc","Date","toJSON","split","parseTime","formatInTimeZone","matched","hours","minutes","hoursAndMinutes","RegExp","_text$match","m","parseInt","parseDuration","push","flat","html","lang","console","log"],"mappings":"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"}
|
package/pkg/parse.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{unified as t}from"unified";import n from"remark-parse";import e from"remark-gfm";import r from"@sindresorhus/slugify";import i from"remark-stringify";import o from"strip-final-newline";import{isMatch as u,parse as a}from"date-fns";import{zonedTimeToUtc as f,formatInTimeZone as c}from"date-fns-tz/esm";function l(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,r=new Array(n);e<n;e++)r[e]=t[e];return r}var h=["yyyy-MM-dd","dd/MM/yyyy","dd/MM/yy","dd-MM-yyyy","dd-MM-yy","dd.MM.yyyy","dd.MM.yy"],
|
|
1
|
+
import{unified as t}from"unified";import n from"remark-parse";import e from"remark-gfm";import r from"@sindresorhus/slugify";import i from"remark-stringify";import o from"strip-final-newline";import{isMatch as u,parse as a}from"date-fns";import{zonedTimeToUtc as f,formatInTimeZone as c}from"date-fns-tz/esm";function l(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,r=new Array(n);e<n;e++)r[e]=t[e];return r}var h=["yyyy-MM-dd","dd/MM/yyyy","dd/MM/yy","dd-MM-yyyy","dd-MM-yy","dd.MM.yyyy","dd.MM.yy"],d=["HH:mm","HH.mm","hh:mm a","hh:mm A"],s=function t(n){return n.children.map(function(e){var r={};return"list"===e.type?t(n):"listItem"===e.type?(r.checked=e.checked,e.children.map(function(t){if("paragraph"===t.type)return r.text=t.children.map(function(t){return"link"===t.type?t.children[0].value:t.value}).filter(function(t){return!!t}).join(""),r}).filter(function(t){return!!t})):void 0}).filter(function(t){return!!t})};function m(t,n,e){if(!t.s){if(e instanceof y){if(!e.s)return void(e.o=m.bind(null,t,n));1&n&&(n=e.s),e=e.v}if(e&&e.then)return void e.then(m.bind(null,t,n),m.bind(null,t,2));t.s=n,t.v=e;var r=t.o;r&&r(t)}}var p=function(p){try{var g,b,M,x,w,k,O,A,I,j,H,S,T;return Promise.resolve(t().use(n).use(e).parse(p)).then(function(n){function p(){for(H in C)(T=(S=C[H]).content.filter(Boolean))&&T.length>0&&(1===T.length&&(S.text=T[0]),S.text=T.join("\n\n")),S.content=T;return C}if(!n)return[];var C={},U=null;g=function(t,n){var e="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(e)return(e=e.call(t)).next.bind(e);if(Array.isArray(t)||(e=function(t,n){if(t){if("string"==typeof t)return l(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);return"Object"===e&&t.constructor&&(e=t.constructor.name),"Map"===e||"Set"===e?Array.from(t):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?l(t,n):void 0}}(t))){e&&(t=e);var r=0;return function(){return r>=t.length?{done:!0}:{done:!1,value:t[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(n.children);var E=function(t,n,e){for(var r;;){var i=t();if(v(i)&&(i=i.v),!i)return o;if(i.then){r=0;break}var o=e();if(o&&o.then){if(!v(o)){r=1;break}o=o.s}}var u=new y,a=m.bind(null,u,2);return(0===r?i.then(c):1===r?o.then(f):(void 0).then(function(){(i=t())?i.then?i.then(c).then(void 0,a):c(i):m(u,1,o)})).then(void 0,a),u;function f(n){o=n;do{if(!(i=t())||v(i)&&!i.v)return void m(u,1,o);if(i.then)return void i.then(c).then(void 0,a);v(o=e())&&(o=o.v)}while(!o||!o.then);o.then(f).then(void 0,a)}function c(t){t?(o=e())&&o.then?o.then(f).then(void 0,a):f(o):m(u,1,o)}}(function(){return!(b=g()).done},0,function(){return M=b.value,Promise.resolve(t().use(e).use(i).stringify(M)).then(function(t){var n,e;(x=o(t)).indexOf("\\_")>-1&&(x=x.replace(/\\_/g,"_")),"heading"===M.type&&3===M.depth?(U=r(M.children[0].value),C[U]={title:M.children[0].value,content:[]}):"paragraph"===M.type&&U?(w=C[U],n=x,e=h.map(function(t){return u(n,t)}),k=e.indexOf(!0)>-1?f(a(n,h[e.indexOf(!0)],new Date),"UTC").toJSON().split("T")[0]:null,O=function(t){var n=d.map(function(n){return u(t,n)});if(n.indexOf(!0)>-1){var e=f(a(t,d[n.indexOf(!0)],new Date),"UTC");return c(e,"UTC","HH:mm")}return null}(x),A=function(t){var n=!1,e={hours:0,minutes:0},r=new RegExp(/([0-9]+)h([0-9]+)m/),i=new RegExp(/([0-9]+)h/);if(t.match(r)){n=!0;var o=t.match(r),u=o[2];e.hours=parseInt(o[1]),e.minutes=parseInt(u)}else if(t.match(i)){n=!0;var a=t.match(i);e.hours=parseInt(a[1]),e.minutes=0}return n?e:null}(x),k&&(w.date=k),O&&(w.time=O),A&&(w.duration=A),w.content.push(x)):"list"===M.type?((I=C[U]).text=x,I.list=s(M).flat()):"html"===M.type?C[U].content.push(M.html):"code"===M.type?((j=C[U]).lang=M.lang,j.text=x):"heading"===M.type&&M.depth>3?C[U].content.push(M.children[0].value):(console.log("unhandled token type"),console.log(M))})});return E&&E.then?E.then(p):p()})}catch(t){return Promise.reject(t)}};const y=/*#__PURE__*/function(){function t(){}return t.prototype.then=function(n,e){const r=new t,i=this.s;if(i){const t=1&i?n:e;if(t){try{m(r,1,t(this.v))}catch(t){m(r,2,t)}return r}return this}return this.o=function(t){try{const i=t.v;1&t.s?m(r,1,n?n(i):i):e?m(r,1,e(i)):m(r,2,i)}catch(t){m(r,2,t)}},r},t}();function v(t){return t instanceof y&&1&t.s}export{p as default};
|
|
2
2
|
//# sourceMappingURL=parse.js.map
|
package/pkg/parse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sources":["../src/parsers/date.js","../src/parsers/time.js","../src/parsers/index.js","../src/parsers/list.js","../src/parse.js","../src/parsers/duration.js"],"sourcesContent":["'use strict'\n\nimport { parse, isMatch } from 'date-fns'\nimport { zonedTimeToUtc } from 'date-fns-tz/esm'\n\nconst loc = 'UTC'\nconst commonDateFormats = [\n 'yyyy-MM-dd',\n 'dd/MM/yyyy',\n 'dd/MM/yy',\n 'dd-MM-yyyy',\n 'dd-MM-yy',\n 'dd.MM.yyyy',\n 'dd.MM.yy'\n]\n\nexport default function parseDate(text) {\n const match = commonDateFormats.map((format) => {\n return isMatch(text, format)\n })\n if (match.indexOf(true) > -1) {\n const date = zonedTimeToUtc(\n parse(text, commonDateFormats[match.indexOf(true)], new Date()),\n loc\n ).toJSON()\n return date.split('T')[0]\n } else {\n return null\n }\n}\n","'use strict'\n\nimport { parse, isMatch } from 'date-fns'\nimport { zonedTimeToUtc, formatInTimeZone } from 'date-fns-tz/esm'\n\nconst loc = 'UTC'\nconst commonTimeFormats = ['HH:mm', 'HH.mm', 'hh:mm a', 'hh:mm A']\n\nexport default function parseTime(text) {\n const match = commonTimeFormats.map((format) => {\n return isMatch(text, format)\n })\n if (match.indexOf(true) > -1) {\n const time = zonedTimeToUtc(\n parse(text, commonTimeFormats[match.indexOf(true)], new Date()),\n loc\n )\n return formatInTimeZone(time, loc, 'HH:mm')\n } else {\n return null\n }\n}\n","'use strict'\n\nimport date from './date.js'\nimport time from './time.js'\nimport duration from './duration.js'\nimport list from './list.js'\n\nexport const parseDate = date\nexport const parseTime = time\nexport const parseDuration = duration\nexport const parseList = list\n","'use strict'\n\nexport default function parseList(list) {\n return list.children\n .map((item) => {\n const listItem = {}\n if (item.type === 'list') {\n return parseList(list)\n } else if (item.type === 'listItem') {\n listItem.checked = item.checked\n return item.children\n .map((child) => {\n if (child.type === 'paragraph') {\n listItem.text = child.children\n .map((c) => {\n if (c.type === 'link') {\n return c.children[0].value\n } else {\n return c.value\n }\n })\n .filter((x) => !!x)\n .join('')\n return listItem\n }\n })\n .filter((x) => !!x)\n }\n })\n .filter((x) => !!x)\n}\n","'use strict'\n\nimport { unified } from 'unified'\nimport remarkParse from 'remark-parse'\nimport remarkGfm from 'remark-gfm'\nimport slugify from '@sindresorhus/slugify'\nimport remarkStringify from 'remark-stringify'\nimport stripFinalNewline from 'strip-final-newline'\n\nimport {\n parseDate,\n parseTime,\n parseDuration,\n parseList\n} from './parsers/index.js'\n\nexport default async function parseMD(body) {\n const tokens = await unified().use(remarkParse).use(remarkGfm).parse(body)\n if (!tokens) {\n return []\n }\n\n const structuredResponse = {}\n let currentHeading = null\n for (const token of tokens.children) {\n const text = await unified()\n .use(remarkGfm)\n .use(remarkStringify)\n .stringify(token)\n const cleanText = stripFinalNewline(text)\n\n // issue forms uses h3 as a heading\n if (token.type === 'heading' && token.depth === 3) {\n currentHeading = slugify(token.children[0].value)\n structuredResponse[currentHeading] = {\n title: token.children[0].value,\n content: []\n }\n } else if (token.type === 'paragraph' && currentHeading) {\n const obj = structuredResponse[currentHeading]\n\n const date = parseDate(cleanText)\n const time = parseTime(cleanText)\n const duration = parseDuration(cleanText)\n\n if (date) {\n obj.date = date\n }\n\n if (time) {\n obj.time = time\n }\n\n if (duration) {\n obj.duration = duration\n }\n\n obj.content.push(cleanText)\n } else if (token.type === 'list') {\n const obj = structuredResponse[currentHeading]\n obj.text = cleanText\n obj.list = parseList(token).flat()\n } else if (token.type === 'html') {\n const obj = structuredResponse[currentHeading]\n obj.content.push(token.html)\n } else if (token.type === 'code') {\n const obj = structuredResponse[currentHeading]\n obj.lang = token.lang\n obj.text = cleanText\n } else if (token.type === 'heading' && token.depth > 3) {\n const obj = structuredResponse[currentHeading]\n obj.content.push(token.children[0].value)\n } else {\n console.log('unhandled token type')\n console.log(token)\n }\n }\n\n for (const key in structuredResponse) {\n const token = structuredResponse[key]\n const content = token.content.filter(Boolean)\n if (content && content.length > 0) {\n if (content.length === 1) {\n token.text = content[0]\n }\n token.text = content.join('\\n\\n')\n }\n token.content = content\n }\n\n return structuredResponse\n}\n","'use strict'\n\nexport default function parseDuration(text) {\n let matched = false\n const duration = {\n hours: 0,\n minutes: 0\n }\n\n const hoursAndMinutes = new RegExp(/([0-9]+)h([0-9]+)m/)\n const hours = new RegExp(/([0-9]+)h/)\n\n if (text.match(hoursAndMinutes)) {\n matched = true\n const [, h, m] = text.match(hoursAndMinutes)\n duration.hours = parseInt(h)\n duration.minutes = parseInt(m)\n } else if (text.match(hours)) {\n matched = true\n const [, h] = text.match(hours)\n duration.hours = parseInt(h)\n duration.minutes = 0\n }\n\n if (matched) {\n return duration\n } else {\n return null\n }\n}\n"],"names":["commonDateFormats","commonTimeFormats","parseList","list","children","map","item","listItem","type","checked","child","text","c","value","filter","x","join","_settle","pact","state","s","_Pact","o","bind","v","then","observer","parseMD","body","token","cleanText","obj","date","time","duration","key","content","unified","use","remarkParse","remarkGfm","parse","tokens","_temp2","structuredResponse","Boolean","length","currentHeading","_iterator","test","update","stage","shouldContinue","_isSettledPact","result","reject","_resumeAfterTest","_resumeAfterBody","updateValue","remarkStringify","stringify","match","stripFinalNewline","depth","slugify","title","format","isMatch","indexOf","zonedTimeToUtc","Date","toJSON","split","parseTime","formatInTimeZone","matched","hours","minutes","hoursAndMinutes","RegExp","_text$match","m","parseInt","parseDuration","push","flat","html","lang","console","log","_temp","prototype","onFulfilled","onRejected","this","callback","e","_this","thenable"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parse.js","sources":["../src/parsers/date.js","../src/parsers/time.js","../src/parsers/index.js","../src/parsers/list.js","../src/parse.js","../src/parsers/duration.js"],"sourcesContent":["'use strict'\n\nimport { parse, isMatch } from 'date-fns'\nimport { zonedTimeToUtc } from 'date-fns-tz/esm'\n\nconst loc = 'UTC'\nconst commonDateFormats = [\n 'yyyy-MM-dd',\n 'dd/MM/yyyy',\n 'dd/MM/yy',\n 'dd-MM-yyyy',\n 'dd-MM-yy',\n 'dd.MM.yyyy',\n 'dd.MM.yy'\n]\n\nexport default function parseDate(text) {\n const match = commonDateFormats.map((format) => {\n return isMatch(text, format)\n })\n if (match.indexOf(true) > -1) {\n const date = zonedTimeToUtc(\n parse(text, commonDateFormats[match.indexOf(true)], new Date()),\n loc\n ).toJSON()\n return date.split('T')[0]\n } else {\n return null\n }\n}\n","'use strict'\n\nimport { parse, isMatch } from 'date-fns'\nimport { zonedTimeToUtc, formatInTimeZone } from 'date-fns-tz/esm'\n\nconst loc = 'UTC'\nconst commonTimeFormats = ['HH:mm', 'HH.mm', 'hh:mm a', 'hh:mm A']\n\nexport default function parseTime(text) {\n const match = commonTimeFormats.map((format) => {\n return isMatch(text, format)\n })\n if (match.indexOf(true) > -1) {\n const time = zonedTimeToUtc(\n parse(text, commonTimeFormats[match.indexOf(true)], new Date()),\n loc\n )\n return formatInTimeZone(time, loc, 'HH:mm')\n } else {\n return null\n }\n}\n","'use strict'\n\nimport date from './date.js'\nimport time from './time.js'\nimport duration from './duration.js'\nimport list from './list.js'\n\nexport const parseDate = date\nexport const parseTime = time\nexport const parseDuration = duration\nexport const parseList = list\n","'use strict'\n\nexport default function parseList(list) {\n return list.children\n .map((item) => {\n const listItem = {}\n if (item.type === 'list') {\n return parseList(list)\n } else if (item.type === 'listItem') {\n listItem.checked = item.checked\n return item.children\n .map((child) => {\n if (child.type === 'paragraph') {\n listItem.text = child.children\n .map((c) => {\n if (c.type === 'link') {\n return c.children[0].value\n } else {\n return c.value\n }\n })\n .filter((x) => !!x)\n .join('')\n return listItem\n }\n })\n .filter((x) => !!x)\n }\n })\n .filter((x) => !!x)\n}\n","'use strict'\n\nimport { unified } from 'unified'\nimport remarkParse from 'remark-parse'\nimport remarkGfm from 'remark-gfm'\nimport slugify from '@sindresorhus/slugify'\nimport remarkStringify from 'remark-stringify'\nimport stripFinalNewline from 'strip-final-newline'\n\nimport {\n parseDate,\n parseTime,\n parseDuration,\n parseList\n} from './parsers/index.js'\n\nexport default async function parseMD(body) {\n const tokens = await unified().use(remarkParse).use(remarkGfm).parse(body)\n if (!tokens) {\n return []\n }\n\n const structuredResponse = {}\n let currentHeading = null\n for (const token of tokens.children) {\n const text = await unified()\n .use(remarkGfm)\n .use(remarkStringify)\n .stringify(token)\n let cleanText = stripFinalNewline(text)\n\n // remove `\\\\_`\n if (cleanText.indexOf('\\\\_') > -1) {\n cleanText = cleanText.replace(/\\\\_/g, '_')\n }\n\n // issue forms uses h3 as a heading\n if (token.type === 'heading' && token.depth === 3) {\n currentHeading = slugify(token.children[0].value)\n structuredResponse[currentHeading] = {\n title: token.children[0].value,\n content: []\n }\n } else if (token.type === 'paragraph' && currentHeading) {\n const obj = structuredResponse[currentHeading]\n\n const date = parseDate(cleanText)\n const time = parseTime(cleanText)\n const duration = parseDuration(cleanText)\n\n if (date) {\n obj.date = date\n }\n\n if (time) {\n obj.time = time\n }\n\n if (duration) {\n obj.duration = duration\n }\n\n obj.content.push(cleanText)\n } else if (token.type === 'list') {\n const obj = structuredResponse[currentHeading]\n obj.text = cleanText\n obj.list = parseList(token).flat()\n } else if (token.type === 'html') {\n const obj = structuredResponse[currentHeading]\n obj.content.push(token.html)\n } else if (token.type === 'code') {\n const obj = structuredResponse[currentHeading]\n obj.lang = token.lang\n obj.text = cleanText\n } else if (token.type === 'heading' && token.depth > 3) {\n const obj = structuredResponse[currentHeading]\n obj.content.push(token.children[0].value)\n } else {\n console.log('unhandled token type')\n console.log(token)\n }\n }\n\n for (const key in structuredResponse) {\n const token = structuredResponse[key]\n const content = token.content.filter(Boolean)\n if (content && content.length > 0) {\n if (content.length === 1) {\n token.text = content[0]\n }\n token.text = content.join('\\n\\n')\n }\n token.content = content\n }\n\n return structuredResponse\n}\n","'use strict'\n\nexport default function parseDuration(text) {\n let matched = false\n const duration = {\n hours: 0,\n minutes: 0\n }\n\n const hoursAndMinutes = new RegExp(/([0-9]+)h([0-9]+)m/)\n const hours = new RegExp(/([0-9]+)h/)\n\n if (text.match(hoursAndMinutes)) {\n matched = true\n const [, h, m] = text.match(hoursAndMinutes)\n duration.hours = parseInt(h)\n duration.minutes = parseInt(m)\n } else if (text.match(hours)) {\n matched = true\n const [, h] = text.match(hours)\n duration.hours = parseInt(h)\n duration.minutes = 0\n }\n\n if (matched) {\n return duration\n } else {\n return null\n }\n}\n"],"names":["commonDateFormats","commonTimeFormats","parseList","list","children","map","item","listItem","type","checked","child","text","c","value","filter","x","join","_settle","pact","state","s","_Pact","o","bind","v","then","observer","parseMD","body","token","cleanText","obj","date","time","duration","key","content","Promise","resolve","unified","use","remarkParse","remarkGfm","parse","tokens","_temp2","structuredResponse","Boolean","length","currentHeading","_iterator","_createForOfIteratorHelperLoose","_temp","test","update","stage","shouldContinue","_isSettledPact","result","reject","_resumeAfterTest","_resumeAfterBody","updateValue","_for","_step","done","remarkStringify","stringify","match","stripFinalNewline","indexOf","replace","depth","slugify","title","format","isMatch","zonedTimeToUtc","Date","toJSON","split","parseTime","formatInTimeZone","matched","hours","minutes","hoursAndMinutes","RegExp","_text$match","m","parseInt","parseDuration","push","flat","html","lang","console","log","prototype","onFulfilled","onRejected","this","callback","e","_this","thenable"],"mappings":"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"}
|
package/pkg/parse.modern.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{unified as
|
|
1
|
+
import{unified as e}from"unified";import t from"remark-parse";import n from"remark-gfm";import r from"@sindresorhus/slugify";import i from"remark-stringify";import o from"strip-final-newline";import{isMatch as s,parse as l}from"date-fns";import{zonedTimeToUtc as a,formatInTimeZone as c}from"date-fns-tz/esm";const m=["yyyy-MM-dd","dd/MM/yyyy","dd/MM/yy","dd-MM-yyyy","dd-MM-yy","dd.MM.yyyy","dd.MM.yy"],f=["HH:mm","HH.mm","hh:mm a","hh:mm A"],d=function(e){const t=m.map(t=>s(e,t));return t.indexOf(!0)>-1?a(l(e,m[t.indexOf(!0)],new Date),"UTC").toJSON().split("T")[0]:null},p=function(e){const t=f.map(t=>s(e,t));if(t.indexOf(!0)>-1){const n=a(l(e,f[t.indexOf(!0)],new Date),"UTC");return c(n,"UTC","HH:mm")}return null},u=function(e){let t=!1;const n={hours:0,minutes:0},r=new RegExp(/([0-9]+)h([0-9]+)m/),i=new RegExp(/([0-9]+)h/);if(e.match(r)){t=!0;const[,i,o]=e.match(r);n.hours=parseInt(i),n.minutes=parseInt(o)}else if(e.match(i)){t=!0;const[,r]=e.match(i);n.hours=parseInt(r),n.minutes=0}return t?n:null},h=function e(t){return t.children.map(n=>{const r={};return"list"===n.type?e(t):"listItem"===n.type?(r.checked=n.checked,n.children.map(e=>{if("paragraph"===e.type)return r.text=e.children.map(e=>"link"===e.type?e.children[0].value:e.value).filter(e=>!!e).join(""),r}).filter(e=>!!e)):void 0}).filter(e=>!!e)};async function y(s){const l=await e().use(t).use(n).parse(s);if(!l)return[];const a={};let c=null;for(const t of l.children){const s=await e().use(n).use(i).stringify(t);let l=o(s);if(l.indexOf("\\_")>-1&&(l=l.replace(/\\_/g,"_")),"heading"===t.type&&3===t.depth)c=r(t.children[0].value),a[c]={title:t.children[0].value,content:[]};else if("paragraph"===t.type&&c){const e=a[c],t=d(l),n=p(l),r=u(l);t&&(e.date=t),n&&(e.time=n),r&&(e.duration=r),e.content.push(l)}else if("list"===t.type){const e=a[c];e.text=l,e.list=h(t).flat()}else if("html"===t.type)a[c].content.push(t.html);else if("code"===t.type){const e=a[c];e.lang=t.lang,e.text=l}else"heading"===t.type&&t.depth>3?a[c].content.push(t.children[0].value):(console.log("unhandled token type"),console.log(t))}for(const e in a){const t=a[e],n=t.content.filter(Boolean);n&&n.length>0&&(1===n.length&&(t.text=n[0]),t.text=n.join("\n\n")),t.content=n}return a}export{y as default};
|
|
2
2
|
//# sourceMappingURL=parse.modern.js.map
|
package/pkg/parse.modern.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.modern.js","sources":["../src/parsers/date.js","../src/parsers/time.js","../src/parsers/index.js","../src/parsers/duration.js","../src/parsers/list.js","../src/parse.js"],"sourcesContent":["'use strict'\n\nimport { parse, isMatch } from 'date-fns'\nimport { zonedTimeToUtc } from 'date-fns-tz/esm'\n\nconst loc = 'UTC'\nconst commonDateFormats = [\n 'yyyy-MM-dd',\n 'dd/MM/yyyy',\n 'dd/MM/yy',\n 'dd-MM-yyyy',\n 'dd-MM-yy',\n 'dd.MM.yyyy',\n 'dd.MM.yy'\n]\n\nexport default function parseDate(text) {\n const match = commonDateFormats.map((format) => {\n return isMatch(text, format)\n })\n if (match.indexOf(true) > -1) {\n const date = zonedTimeToUtc(\n parse(text, commonDateFormats[match.indexOf(true)], new Date()),\n loc\n ).toJSON()\n return date.split('T')[0]\n } else {\n return null\n }\n}\n","'use strict'\n\nimport { parse, isMatch } from 'date-fns'\nimport { zonedTimeToUtc, formatInTimeZone } from 'date-fns-tz/esm'\n\nconst loc = 'UTC'\nconst commonTimeFormats = ['HH:mm', 'HH.mm', 'hh:mm a', 'hh:mm A']\n\nexport default function parseTime(text) {\n const match = commonTimeFormats.map((format) => {\n return isMatch(text, format)\n })\n if (match.indexOf(true) > -1) {\n const time = zonedTimeToUtc(\n parse(text, commonTimeFormats[match.indexOf(true)], new Date()),\n loc\n )\n return formatInTimeZone(time, loc, 'HH:mm')\n } else {\n return null\n }\n}\n","'use strict'\n\nimport date from './date.js'\nimport time from './time.js'\nimport duration from './duration.js'\nimport list from './list.js'\n\nexport const parseDate = date\nexport const parseTime = time\nexport const parseDuration = duration\nexport const parseList = list\n","'use strict'\n\nexport default function parseDuration(text) {\n let matched = false\n const duration = {\n hours: 0,\n minutes: 0\n }\n\n const hoursAndMinutes = new RegExp(/([0-9]+)h([0-9]+)m/)\n const hours = new RegExp(/([0-9]+)h/)\n\n if (text.match(hoursAndMinutes)) {\n matched = true\n const [, h, m] = text.match(hoursAndMinutes)\n duration.hours = parseInt(h)\n duration.minutes = parseInt(m)\n } else if (text.match(hours)) {\n matched = true\n const [, h] = text.match(hours)\n duration.hours = parseInt(h)\n duration.minutes = 0\n }\n\n if (matched) {\n return duration\n } else {\n return null\n }\n}\n","'use strict'\n\nexport default function parseList(list) {\n return list.children\n .map((item) => {\n const listItem = {}\n if (item.type === 'list') {\n return parseList(list)\n } else if (item.type === 'listItem') {\n listItem.checked = item.checked\n return item.children\n .map((child) => {\n if (child.type === 'paragraph') {\n listItem.text = child.children\n .map((c) => {\n if (c.type === 'link') {\n return c.children[0].value\n } else {\n return c.value\n }\n })\n .filter((x) => !!x)\n .join('')\n return listItem\n }\n })\n .filter((x) => !!x)\n }\n })\n .filter((x) => !!x)\n}\n","'use strict'\n\nimport { unified } from 'unified'\nimport remarkParse from 'remark-parse'\nimport remarkGfm from 'remark-gfm'\nimport slugify from '@sindresorhus/slugify'\nimport remarkStringify from 'remark-stringify'\nimport stripFinalNewline from 'strip-final-newline'\n\nimport {\n parseDate,\n parseTime,\n parseDuration,\n parseList\n} from './parsers/index.js'\n\nexport default async function parseMD(body) {\n const tokens = await unified().use(remarkParse).use(remarkGfm).parse(body)\n if (!tokens) {\n return []\n }\n\n const structuredResponse = {}\n let currentHeading = null\n for (const token of tokens.children) {\n const text = await unified()\n .use(remarkGfm)\n .use(remarkStringify)\n .stringify(token)\n
|
|
1
|
+
{"version":3,"file":"parse.modern.js","sources":["../src/parsers/date.js","../src/parsers/time.js","../src/parsers/index.js","../src/parsers/duration.js","../src/parsers/list.js","../src/parse.js"],"sourcesContent":["'use strict'\n\nimport { parse, isMatch } from 'date-fns'\nimport { zonedTimeToUtc } from 'date-fns-tz/esm'\n\nconst loc = 'UTC'\nconst commonDateFormats = [\n 'yyyy-MM-dd',\n 'dd/MM/yyyy',\n 'dd/MM/yy',\n 'dd-MM-yyyy',\n 'dd-MM-yy',\n 'dd.MM.yyyy',\n 'dd.MM.yy'\n]\n\nexport default function parseDate(text) {\n const match = commonDateFormats.map((format) => {\n return isMatch(text, format)\n })\n if (match.indexOf(true) > -1) {\n const date = zonedTimeToUtc(\n parse(text, commonDateFormats[match.indexOf(true)], new Date()),\n loc\n ).toJSON()\n return date.split('T')[0]\n } else {\n return null\n }\n}\n","'use strict'\n\nimport { parse, isMatch } from 'date-fns'\nimport { zonedTimeToUtc, formatInTimeZone } from 'date-fns-tz/esm'\n\nconst loc = 'UTC'\nconst commonTimeFormats = ['HH:mm', 'HH.mm', 'hh:mm a', 'hh:mm A']\n\nexport default function parseTime(text) {\n const match = commonTimeFormats.map((format) => {\n return isMatch(text, format)\n })\n if (match.indexOf(true) > -1) {\n const time = zonedTimeToUtc(\n parse(text, commonTimeFormats[match.indexOf(true)], new Date()),\n loc\n )\n return formatInTimeZone(time, loc, 'HH:mm')\n } else {\n return null\n }\n}\n","'use strict'\n\nimport date from './date.js'\nimport time from './time.js'\nimport duration from './duration.js'\nimport list from './list.js'\n\nexport const parseDate = date\nexport const parseTime = time\nexport const parseDuration = duration\nexport const parseList = list\n","'use strict'\n\nexport default function parseDuration(text) {\n let matched = false\n const duration = {\n hours: 0,\n minutes: 0\n }\n\n const hoursAndMinutes = new RegExp(/([0-9]+)h([0-9]+)m/)\n const hours = new RegExp(/([0-9]+)h/)\n\n if (text.match(hoursAndMinutes)) {\n matched = true\n const [, h, m] = text.match(hoursAndMinutes)\n duration.hours = parseInt(h)\n duration.minutes = parseInt(m)\n } else if (text.match(hours)) {\n matched = true\n const [, h] = text.match(hours)\n duration.hours = parseInt(h)\n duration.minutes = 0\n }\n\n if (matched) {\n return duration\n } else {\n return null\n }\n}\n","'use strict'\n\nexport default function parseList(list) {\n return list.children\n .map((item) => {\n const listItem = {}\n if (item.type === 'list') {\n return parseList(list)\n } else if (item.type === 'listItem') {\n listItem.checked = item.checked\n return item.children\n .map((child) => {\n if (child.type === 'paragraph') {\n listItem.text = child.children\n .map((c) => {\n if (c.type === 'link') {\n return c.children[0].value\n } else {\n return c.value\n }\n })\n .filter((x) => !!x)\n .join('')\n return listItem\n }\n })\n .filter((x) => !!x)\n }\n })\n .filter((x) => !!x)\n}\n","'use strict'\n\nimport { unified } from 'unified'\nimport remarkParse from 'remark-parse'\nimport remarkGfm from 'remark-gfm'\nimport slugify from '@sindresorhus/slugify'\nimport remarkStringify from 'remark-stringify'\nimport stripFinalNewline from 'strip-final-newline'\n\nimport {\n parseDate,\n parseTime,\n parseDuration,\n parseList\n} from './parsers/index.js'\n\nexport default async function parseMD(body) {\n const tokens = await unified().use(remarkParse).use(remarkGfm).parse(body)\n if (!tokens) {\n return []\n }\n\n const structuredResponse = {}\n let currentHeading = null\n for (const token of tokens.children) {\n const text = await unified()\n .use(remarkGfm)\n .use(remarkStringify)\n .stringify(token)\n let cleanText = stripFinalNewline(text)\n\n // remove `\\\\_`\n if (cleanText.indexOf('\\\\_') > -1) {\n cleanText = cleanText.replace(/\\\\_/g, '_')\n }\n\n // issue forms uses h3 as a heading\n if (token.type === 'heading' && token.depth === 3) {\n currentHeading = slugify(token.children[0].value)\n structuredResponse[currentHeading] = {\n title: token.children[0].value,\n content: []\n }\n } else if (token.type === 'paragraph' && currentHeading) {\n const obj = structuredResponse[currentHeading]\n\n const date = parseDate(cleanText)\n const time = parseTime(cleanText)\n const duration = parseDuration(cleanText)\n\n if (date) {\n obj.date = date\n }\n\n if (time) {\n obj.time = time\n }\n\n if (duration) {\n obj.duration = duration\n }\n\n obj.content.push(cleanText)\n } else if (token.type === 'list') {\n const obj = structuredResponse[currentHeading]\n obj.text = cleanText\n obj.list = parseList(token).flat()\n } else if (token.type === 'html') {\n const obj = structuredResponse[currentHeading]\n obj.content.push(token.html)\n } else if (token.type === 'code') {\n const obj = structuredResponse[currentHeading]\n obj.lang = token.lang\n obj.text = cleanText\n } else if (token.type === 'heading' && token.depth > 3) {\n const obj = structuredResponse[currentHeading]\n obj.content.push(token.children[0].value)\n } else {\n console.log('unhandled token type')\n console.log(token)\n }\n }\n\n for (const key in structuredResponse) {\n const token = structuredResponse[key]\n const content = token.content.filter(Boolean)\n if (content && content.length > 0) {\n if (content.length === 1) {\n token.text = content[0]\n }\n token.text = content.join('\\n\\n')\n }\n token.content = content\n }\n\n return structuredResponse\n}\n"],"names":["commonDateFormats","commonTimeFormats","parseDate","text","match","map","format","isMatch","indexOf","zonedTimeToUtc","parse","Date","toJSON","split","parseTime","time","formatInTimeZone","parseDuration","matched","duration","hours","minutes","hoursAndMinutes","RegExp","h","m","parseInt","parseList","list","children","item","listItem","type","checked","child","c","value","filter","x","join","async","parseMD","body","tokens","unified","use","remarkParse","remarkGfm","structuredResponse","currentHeading","token","remarkStringify","stringify","cleanText","stripFinalNewline","replace","depth","slugify","title","content","obj","date","push","flat","html","lang","console","log","key","Boolean","length"],"mappings":"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"}
|
package/pkg/parse.umd.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("unified"),require("remark-parse"),require("remark-gfm"),require("@sindresorhus/slugify"),require("remark-stringify"),require("strip-final-newline"),require("date-fns"),require("date-fns-tz/esm")):"function"==typeof define&&define.amd?define(["unified","remark-parse","remark-gfm","@sindresorhus/slugify","remark-stringify","strip-final-newline","date-fns","date-fns-tz/esm"],n):(e||self).issueFormsBodyParser=n(e.unified,e.remarkParse,e.remarkGfm,e.slugify,e.remarkStringify,e.stripFinalNewline,e.dateFns,e.esm)}(this,function(e,n,t,r,i,o,u,a){function f(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=/*#__PURE__*/f(n),
|
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("unified"),require("remark-parse"),require("remark-gfm"),require("@sindresorhus/slugify"),require("remark-stringify"),require("strip-final-newline"),require("date-fns"),require("date-fns-tz/esm")):"function"==typeof define&&define.amd?define(["unified","remark-parse","remark-gfm","@sindresorhus/slugify","remark-stringify","strip-final-newline","date-fns","date-fns-tz/esm"],n):(e||self).issueFormsBodyParser=n(e.unified,e.remarkParse,e.remarkGfm,e.slugify,e.remarkStringify,e.stripFinalNewline,e.dateFns,e.esm)}(this,function(e,n,t,r,i,o,u,a){function f(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var l=/*#__PURE__*/f(n),d=/*#__PURE__*/f(t),s=/*#__PURE__*/f(r),c=/*#__PURE__*/f(i),h=/*#__PURE__*/f(o);function m(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}var y=["yyyy-MM-dd","dd/MM/yyyy","dd/MM/yy","dd-MM-yyyy","dd-MM-yy","dd.MM.yyyy","dd.MM.yy"],p=["HH:mm","HH.mm","hh:mm a","hh:mm A"],v=function e(n){return n.children.map(function(t){var r={};return"list"===t.type?e(n):"listItem"===t.type?(r.checked=t.checked,t.children.map(function(e){if("paragraph"===e.type)return r.text=e.children.map(function(e){return"link"===e.type?e.children[0].value:e.value}).filter(function(e){return!!e}).join(""),r}).filter(function(e){return!!e})):void 0}).filter(function(e){return!!e})};function g(e,n,t){if(!e.s){if(t instanceof b){if(!t.s)return void(t.o=g.bind(null,e,n));1&n&&(n=t.s),t=t.v}if(t&&t.then)return void t.then(g.bind(null,e,n),g.bind(null,e,2));e.s=n,e.v=t;var r=e.o;r&&r(e)}}const b=/*#__PURE__*/function(){function e(){}return e.prototype.then=function(n,t){const r=new e,i=this.s;if(i){const e=1&i?n:t;if(e){try{g(r,1,e(this.v))}catch(e){g(r,2,e)}return r}return this}return this.o=function(e){try{const i=e.v;1&e.s?g(r,1,n?n(i):i):t?g(r,1,t(i)):g(r,2,i)}catch(e){g(r,2,e)}},r},e}();function M(e){return e instanceof b&&1&e.s}return function(n){try{var t,r,i,o,f,k,x,w,T,j,q,I,O;return Promise.resolve(e.unified().use(l.default).use(d.default).parse(n)).then(function(n){function l(){for(q in A)(O=(I=A[q]).content.filter(Boolean))&&O.length>0&&(1===O.length&&(I.text=O[0]),I.text=O.join("\n\n")),I.content=O;return A}if(!n)return[];var A={},S=null;t=function(e,n){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(t)return(t=t.call(e)).next.bind(t);if(Array.isArray(e)||(t=function(e,n){if(e){if("string"==typeof e)return m(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?m(e,n):void 0}}(e))){t&&(e=t);var r=0;return function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(n.children);var H=function(e,n,t){for(var r;;){var i=e();if(M(i)&&(i=i.v),!i)return o;if(i.then){r=0;break}var o=t();if(o&&o.then){if(!M(o)){r=1;break}o=o.s}}var u=new b,a=g.bind(null,u,2);return(0===r?i.then(l):1===r?o.then(f):(void 0).then(function(){(i=e())?i.then?i.then(l).then(void 0,a):l(i):g(u,1,o)})).then(void 0,a),u;function f(n){o=n;do{if(!(i=e())||M(i)&&!i.v)return void g(u,1,o);if(i.then)return void i.then(l).then(void 0,a);M(o=t())&&(o=o.v)}while(!o||!o.then);o.then(f).then(void 0,a)}function l(e){e?(o=t())&&o.then?o.then(f).then(void 0,a):f(o):g(u,1,o)}}(function(){return!(r=t()).done},0,function(){return i=r.value,Promise.resolve(e.unified().use(d.default).use(c.default).stringify(i)).then(function(e){var n,t;(o=h.default(e)).indexOf("\\_")>-1&&(o=o.replace(/\\_/g,"_")),"heading"===i.type&&3===i.depth?(S=s.default(i.children[0].value),A[S]={title:i.children[0].value,content:[]}):"paragraph"===i.type&&S?(f=A[S],n=o,t=y.map(function(e){return u.isMatch(n,e)}),k=t.indexOf(!0)>-1?a.zonedTimeToUtc(u.parse(n,y[t.indexOf(!0)],new Date),"UTC").toJSON().split("T")[0]:null,x=function(e){var n=p.map(function(n){return u.isMatch(e,n)});if(n.indexOf(!0)>-1){var t=a.zonedTimeToUtc(u.parse(e,p[n.indexOf(!0)],new Date),"UTC");return a.formatInTimeZone(t,"UTC","HH:mm")}return null}(o),w=function(e){var n=!1,t={hours:0,minutes:0},r=new RegExp(/([0-9]+)h([0-9]+)m/),i=new RegExp(/([0-9]+)h/);if(e.match(r)){n=!0;var o=e.match(r),u=o[2];t.hours=parseInt(o[1]),t.minutes=parseInt(u)}else if(e.match(i)){n=!0;var a=e.match(i);t.hours=parseInt(a[1]),t.minutes=0}return n?t:null}(o),k&&(f.date=k),x&&(f.time=x),w&&(f.duration=w),f.content.push(o)):"list"===i.type?((T=A[S]).text=o,T.list=v(i).flat()):"html"===i.type?A[S].content.push(i.html):"code"===i.type?((j=A[S]).lang=i.lang,j.text=o):"heading"===i.type&&i.depth>3?A[S].content.push(i.children[0].value):(console.log("unhandled token type"),console.log(i))})});return H&&H.then?H.then(l):l()})}catch(e){return Promise.reject(e)}}});
|
|
2
2
|
//# sourceMappingURL=parse.umd.js.map
|
package/pkg/parse.umd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.umd.js","sources":["../src/parsers/date.js","../src/parsers/time.js","../src/parsers/index.js","../src/parsers/list.js","../src/parse.js","../src/parsers/duration.js"],"sourcesContent":["'use strict'\n\nimport { parse, isMatch } from 'date-fns'\nimport { zonedTimeToUtc } from 'date-fns-tz/esm'\n\nconst loc = 'UTC'\nconst commonDateFormats = [\n 'yyyy-MM-dd',\n 'dd/MM/yyyy',\n 'dd/MM/yy',\n 'dd-MM-yyyy',\n 'dd-MM-yy',\n 'dd.MM.yyyy',\n 'dd.MM.yy'\n]\n\nexport default function parseDate(text) {\n const match = commonDateFormats.map((format) => {\n return isMatch(text, format)\n })\n if (match.indexOf(true) > -1) {\n const date = zonedTimeToUtc(\n parse(text, commonDateFormats[match.indexOf(true)], new Date()),\n loc\n ).toJSON()\n return date.split('T')[0]\n } else {\n return null\n }\n}\n","'use strict'\n\nimport { parse, isMatch } from 'date-fns'\nimport { zonedTimeToUtc, formatInTimeZone } from 'date-fns-tz/esm'\n\nconst loc = 'UTC'\nconst commonTimeFormats = ['HH:mm', 'HH.mm', 'hh:mm a', 'hh:mm A']\n\nexport default function parseTime(text) {\n const match = commonTimeFormats.map((format) => {\n return isMatch(text, format)\n })\n if (match.indexOf(true) > -1) {\n const time = zonedTimeToUtc(\n parse(text, commonTimeFormats[match.indexOf(true)], new Date()),\n loc\n )\n return formatInTimeZone(time, loc, 'HH:mm')\n } else {\n return null\n }\n}\n","'use strict'\n\nimport date from './date.js'\nimport time from './time.js'\nimport duration from './duration.js'\nimport list from './list.js'\n\nexport const parseDate = date\nexport const parseTime = time\nexport const parseDuration = duration\nexport const parseList = list\n","'use strict'\n\nexport default function parseList(list) {\n return list.children\n .map((item) => {\n const listItem = {}\n if (item.type === 'list') {\n return parseList(list)\n } else if (item.type === 'listItem') {\n listItem.checked = item.checked\n return item.children\n .map((child) => {\n if (child.type === 'paragraph') {\n listItem.text = child.children\n .map((c) => {\n if (c.type === 'link') {\n return c.children[0].value\n } else {\n return c.value\n }\n })\n .filter((x) => !!x)\n .join('')\n return listItem\n }\n })\n .filter((x) => !!x)\n }\n })\n .filter((x) => !!x)\n}\n","'use strict'\n\nimport { unified } from 'unified'\nimport remarkParse from 'remark-parse'\nimport remarkGfm from 'remark-gfm'\nimport slugify from '@sindresorhus/slugify'\nimport remarkStringify from 'remark-stringify'\nimport stripFinalNewline from 'strip-final-newline'\n\nimport {\n parseDate,\n parseTime,\n parseDuration,\n parseList\n} from './parsers/index.js'\n\nexport default async function parseMD(body) {\n const tokens = await unified().use(remarkParse).use(remarkGfm).parse(body)\n if (!tokens) {\n return []\n }\n\n const structuredResponse = {}\n let currentHeading = null\n for (const token of tokens.children) {\n const text = await unified()\n .use(remarkGfm)\n .use(remarkStringify)\n .stringify(token)\n const cleanText = stripFinalNewline(text)\n\n // issue forms uses h3 as a heading\n if (token.type === 'heading' && token.depth === 3) {\n currentHeading = slugify(token.children[0].value)\n structuredResponse[currentHeading] = {\n title: token.children[0].value,\n content: []\n }\n } else if (token.type === 'paragraph' && currentHeading) {\n const obj = structuredResponse[currentHeading]\n\n const date = parseDate(cleanText)\n const time = parseTime(cleanText)\n const duration = parseDuration(cleanText)\n\n if (date) {\n obj.date = date\n }\n\n if (time) {\n obj.time = time\n }\n\n if (duration) {\n obj.duration = duration\n }\n\n obj.content.push(cleanText)\n } else if (token.type === 'list') {\n const obj = structuredResponse[currentHeading]\n obj.text = cleanText\n obj.list = parseList(token).flat()\n } else if (token.type === 'html') {\n const obj = structuredResponse[currentHeading]\n obj.content.push(token.html)\n } else if (token.type === 'code') {\n const obj = structuredResponse[currentHeading]\n obj.lang = token.lang\n obj.text = cleanText\n } else if (token.type === 'heading' && token.depth > 3) {\n const obj = structuredResponse[currentHeading]\n obj.content.push(token.children[0].value)\n } else {\n console.log('unhandled token type')\n console.log(token)\n }\n }\n\n for (const key in structuredResponse) {\n const token = structuredResponse[key]\n const content = token.content.filter(Boolean)\n if (content && content.length > 0) {\n if (content.length === 1) {\n token.text = content[0]\n }\n token.text = content.join('\\n\\n')\n }\n token.content = content\n }\n\n return structuredResponse\n}\n","'use strict'\n\nexport default function parseDuration(text) {\n let matched = false\n const duration = {\n hours: 0,\n minutes: 0\n }\n\n const hoursAndMinutes = new RegExp(/([0-9]+)h([0-9]+)m/)\n const hours = new RegExp(/([0-9]+)h/)\n\n if (text.match(hoursAndMinutes)) {\n matched = true\n const [, h, m] = text.match(hoursAndMinutes)\n duration.hours = parseInt(h)\n duration.minutes = parseInt(m)\n } else if (text.match(hours)) {\n matched = true\n const [, h] = text.match(hours)\n duration.hours = parseInt(h)\n duration.minutes = 0\n }\n\n if (matched) {\n return duration\n } else {\n return null\n }\n}\n"],"names":["commonDateFormats","commonTimeFormats","parseList","list","children","map","item","listItem","type","checked","child","text","c","value","filter","x","join","_settle","pact","state","s","_Pact","o","bind","v","then","observer","prototype","onFulfilled","onRejected","result","this","callback","e","_this","thenable","body","token","cleanText","obj","date","time","duration","key","content","unified","use","remarkParse","remarkGfm","parse","tokens","_temp2","structuredResponse","Boolean","length","currentHeading","_iterator","test","update","stage","shouldContinue","_isSettledPact","reject","_resumeAfterTest","_resumeAfterBody","updateValue","remarkStringify","stringify","match","stripFinalNewline","depth","slugify","title","format","isMatch","indexOf","zonedTimeToUtc","Date","toJSON","split","parseTime","formatInTimeZone","matched","hours","minutes","hoursAndMinutes","RegExp","_text$match","m","parseInt","parseDuration","push","flat","html","lang","console","log","_temp"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"parse.umd.js","sources":["../src/parsers/date.js","../src/parsers/time.js","../src/parsers/index.js","../src/parsers/list.js","../src/parse.js","../src/parsers/duration.js"],"sourcesContent":["'use strict'\n\nimport { parse, isMatch } from 'date-fns'\nimport { zonedTimeToUtc } from 'date-fns-tz/esm'\n\nconst loc = 'UTC'\nconst commonDateFormats = [\n 'yyyy-MM-dd',\n 'dd/MM/yyyy',\n 'dd/MM/yy',\n 'dd-MM-yyyy',\n 'dd-MM-yy',\n 'dd.MM.yyyy',\n 'dd.MM.yy'\n]\n\nexport default function parseDate(text) {\n const match = commonDateFormats.map((format) => {\n return isMatch(text, format)\n })\n if (match.indexOf(true) > -1) {\n const date = zonedTimeToUtc(\n parse(text, commonDateFormats[match.indexOf(true)], new Date()),\n loc\n ).toJSON()\n return date.split('T')[0]\n } else {\n return null\n }\n}\n","'use strict'\n\nimport { parse, isMatch } from 'date-fns'\nimport { zonedTimeToUtc, formatInTimeZone } from 'date-fns-tz/esm'\n\nconst loc = 'UTC'\nconst commonTimeFormats = ['HH:mm', 'HH.mm', 'hh:mm a', 'hh:mm A']\n\nexport default function parseTime(text) {\n const match = commonTimeFormats.map((format) => {\n return isMatch(text, format)\n })\n if (match.indexOf(true) > -1) {\n const time = zonedTimeToUtc(\n parse(text, commonTimeFormats[match.indexOf(true)], new Date()),\n loc\n )\n return formatInTimeZone(time, loc, 'HH:mm')\n } else {\n return null\n }\n}\n","'use strict'\n\nimport date from './date.js'\nimport time from './time.js'\nimport duration from './duration.js'\nimport list from './list.js'\n\nexport const parseDate = date\nexport const parseTime = time\nexport const parseDuration = duration\nexport const parseList = list\n","'use strict'\n\nexport default function parseList(list) {\n return list.children\n .map((item) => {\n const listItem = {}\n if (item.type === 'list') {\n return parseList(list)\n } else if (item.type === 'listItem') {\n listItem.checked = item.checked\n return item.children\n .map((child) => {\n if (child.type === 'paragraph') {\n listItem.text = child.children\n .map((c) => {\n if (c.type === 'link') {\n return c.children[0].value\n } else {\n return c.value\n }\n })\n .filter((x) => !!x)\n .join('')\n return listItem\n }\n })\n .filter((x) => !!x)\n }\n })\n .filter((x) => !!x)\n}\n","'use strict'\n\nimport { unified } from 'unified'\nimport remarkParse from 'remark-parse'\nimport remarkGfm from 'remark-gfm'\nimport slugify from '@sindresorhus/slugify'\nimport remarkStringify from 'remark-stringify'\nimport stripFinalNewline from 'strip-final-newline'\n\nimport {\n parseDate,\n parseTime,\n parseDuration,\n parseList\n} from './parsers/index.js'\n\nexport default async function parseMD(body) {\n const tokens = await unified().use(remarkParse).use(remarkGfm).parse(body)\n if (!tokens) {\n return []\n }\n\n const structuredResponse = {}\n let currentHeading = null\n for (const token of tokens.children) {\n const text = await unified()\n .use(remarkGfm)\n .use(remarkStringify)\n .stringify(token)\n let cleanText = stripFinalNewline(text)\n\n // remove `\\\\_`\n if (cleanText.indexOf('\\\\_') > -1) {\n cleanText = cleanText.replace(/\\\\_/g, '_')\n }\n\n // issue forms uses h3 as a heading\n if (token.type === 'heading' && token.depth === 3) {\n currentHeading = slugify(token.children[0].value)\n structuredResponse[currentHeading] = {\n title: token.children[0].value,\n content: []\n }\n } else if (token.type === 'paragraph' && currentHeading) {\n const obj = structuredResponse[currentHeading]\n\n const date = parseDate(cleanText)\n const time = parseTime(cleanText)\n const duration = parseDuration(cleanText)\n\n if (date) {\n obj.date = date\n }\n\n if (time) {\n obj.time = time\n }\n\n if (duration) {\n obj.duration = duration\n }\n\n obj.content.push(cleanText)\n } else if (token.type === 'list') {\n const obj = structuredResponse[currentHeading]\n obj.text = cleanText\n obj.list = parseList(token).flat()\n } else if (token.type === 'html') {\n const obj = structuredResponse[currentHeading]\n obj.content.push(token.html)\n } else if (token.type === 'code') {\n const obj = structuredResponse[currentHeading]\n obj.lang = token.lang\n obj.text = cleanText\n } else if (token.type === 'heading' && token.depth > 3) {\n const obj = structuredResponse[currentHeading]\n obj.content.push(token.children[0].value)\n } else {\n console.log('unhandled token type')\n console.log(token)\n }\n }\n\n for (const key in structuredResponse) {\n const token = structuredResponse[key]\n const content = token.content.filter(Boolean)\n if (content && content.length > 0) {\n if (content.length === 1) {\n token.text = content[0]\n }\n token.text = content.join('\\n\\n')\n }\n token.content = content\n }\n\n return structuredResponse\n}\n","'use strict'\n\nexport default function parseDuration(text) {\n let matched = false\n const duration = {\n hours: 0,\n minutes: 0\n }\n\n const hoursAndMinutes = new RegExp(/([0-9]+)h([0-9]+)m/)\n const hours = new RegExp(/([0-9]+)h/)\n\n if (text.match(hoursAndMinutes)) {\n matched = true\n const [, h, m] = text.match(hoursAndMinutes)\n duration.hours = parseInt(h)\n duration.minutes = parseInt(m)\n } else if (text.match(hours)) {\n matched = true\n const [, h] = text.match(hours)\n duration.hours = parseInt(h)\n duration.minutes = 0\n }\n\n if (matched) {\n return duration\n } else {\n return null\n }\n}\n"],"names":["commonDateFormats","commonTimeFormats","parseList","list","children","map","item","listItem","type","checked","child","text","c","value","filter","x","join","_settle","pact","state","s","_Pact","o","bind","v","then","observer","prototype","onFulfilled","onRejected","result","this","callback","e","_this","thenable","body","token","cleanText","obj","date","time","duration","key","content","Promise","resolve","unified","use","remarkParse","remarkGfm","parse","tokens","_temp2","structuredResponse","Boolean","length","currentHeading","_iterator","_createForOfIteratorHelperLoose","_temp","test","update","stage","shouldContinue","_isSettledPact","reject","_resumeAfterTest","_resumeAfterBody","updateValue","_for","_step","done","remarkStringify","stringify","match","stripFinalNewline","indexOf","replace","depth","slugify","title","format","isMatch","zonedTimeToUtc","Date","toJSON","split","parseTime","formatInTimeZone","matched","hours","minutes","hoursAndMinutes","RegExp","_text$match","m","parseInt","parseDuration","push","flat","html","lang","console","log"],"mappings":"o8BAKA,IACMA,EAAoB,CACxB,aACA,aACA,WACA,aACA,WACA,aACA,YCPIC,EAAoB,CAAC,QAAS,QAAS,UAAW,WCI3CC,ECRWA,SAAAA,EAAUC,GAChC,OAAOA,EAAKC,SACTC,IAAI,SAACC,GACJ,IAAMC,EAAW,CAAjB,EACA,MAAkB,SAAdD,EAAKE,KACAN,EAAUC,GACM,aAAdG,EAAKE,MACdD,EAASE,QAAUH,EAAKG,QACjBH,EAAKF,SACTC,IAAI,SAACK,GACJ,GAAmB,cAAfA,EAAMF,KAWR,OAVAD,EAASI,KAAOD,EAAMN,SACnBC,IAAI,SAACO,GACJ,MAAe,SAAXA,EAAEJ,KACGI,EAAER,SAAS,GAAGS,MAEdD,EAAEC,KAEZ,GACAC,OAAO,SAACC,GAAD,QAASA,CAAT,GACPC,KAAK,IACDT,CAEV,GACAO,OAAO,SAACC,GAAD,QAASA,CAAT,SAlBDT,CAoBZ,GACAQ,OAAO,SAACC,GAAD,QAASA,CAAT,EACX,ECSM,SAASE,EAAQC,EAAMC,EAAON,GACpC,IAAKK,EAAKE,EAAG,CACZ,GAAIP,aAAiBQ,EAAO,CAC3B,IAAIR,EAAMO,EAOT,YADAP,EAAMS,EAAIL,EAAQM,KAAK,KAAML,EAAMC,IALvB,EAARA,IACHA,EAAQN,EAAMO,GAEfP,EAAQA,EAAMW,CAKf,CACD,GAAIX,GAASA,EAAMY,KAElB,YADAZ,EAAMY,KAAKR,EAAQM,KAAK,KAAML,EAAMC,GAAQF,EAAQM,KAAK,KAAML,EAAM,IAGtEA,EAAKE,EAAID,EACTD,EAAKM,EAAIX,EACT,IAAMa,EAAWR,EAAKI,EAClBI,GACHA,EAASR,EAEV,CACD,CA9DM,MAAMG,eAAsB,WAClC,SAAiBA,IAAA,CAiCjB,OAhCAA,EAAMM,UAAUF,KAAO,SAASG,EAAaC,GAC5C,MAAMC,EAAS,IAAfT,EACMF,EAAQY,KAAKX,EACnB,GAAID,EAAO,CACV,MAAMa,EAAmB,EAARb,EAAYS,EAAcC,EAC3C,GAAIG,EAAU,CACb,IACCf,EAAQa,EAAQ,EAAGE,EAASD,KAAKP,GAGjC,CAFC,MAAOS,GACRhB,EAAQa,EAAQ,EAAGG,EACnB,CACD,OAAOH,CACP,CACA,OACAC,IACD,CAeD,OAdAA,KAAKT,EAAI,SAASY,GACjB,IACC,MAAMrB,EAAQqB,EAAMV,EACN,EAAVU,EAAMd,EACTH,EAAQa,EAAQ,EAAGF,EAAcA,EAAYf,GAASA,GAC5CgB,EACVZ,EAAQa,EAAQ,EAAGD,EAAWhB,IAE9BI,EAAQa,EAAQ,EAAGjB,EAIpB,CAFC,MAAOoB,GACRhB,EAAQa,EAAQ,EAAGG,EACnB,CACD,EACMH,CACP,EAEDT,CAAA,CAnCkC,GAgE5B,WAAwBc,GAC9B,OAAOA,aAAQd,GAAkC,EAAbc,EAASf,CAC7C,iBAnDqCgB,OAQzBC,IAAAA,EAAAA,EAAAA,EAKLC,EAeIC,EAEAC,EACAC,EACAC,EAgBAH,EAOAA,EAYCI,EACHN,EACAO,EArEkC,OAAAC,QAAAC,QACrBC,EAAAA,UAAUC,IAAIC,EAAd,SAA2BD,IAAIE,EAA/B,SAA0CC,MAAMf,IAD3BX,KAAA,SACpC2B,GAkEN,SAAAC,IAAA,IAAWV,KAAOW,GAEVV,GADAP,EAAQiB,EAAmBX,IACXC,QAAQ9B,OAAOyC,WACtBX,EAAQY,OAAS,IACP,IAAnBZ,EAAQY,SACVnB,EAAM1B,KAAOiC,EAAQ,IAEvBP,EAAM1B,KAAOiC,EAAQ5B,KAAK,SAE5BqB,EAAMO,QAAUA,EAGlB,OAAOU,CA/EmC,CAE1C,IAAKF,EACH,MAAO,GAGT,IAAME,EAAqB,CAA3B,EACIG,EAAiB,KAPqBC,2qBAAAC,CAQtBP,EAAOhD,UAAU,IAAAwD,EAuOhC,SAAcC,EAAMC,EAAQ1B,GAElC,IADA,IAAI2B,IACK,CACR,IAAIC,EAAiBH,IAIrB,GAHII,EAAeD,KAClBA,EAAiBA,EAAexC,IAE5BwC,EACJ,OAAOlC,EAER,GAAIkC,EAAevC,KAAM,CACxBsC,EAAQ,EACR,KACA,CACD,IAAIjC,EAASM,IACb,GAAIN,GAAUA,EAAOL,KAAM,CAC1B,IAAIwC,EAAenC,GAEZ,CACNiC,EAAQ,EACR,KACA,CAJAjC,EAASA,EAAOV,CAKjB,CAQD,CACD,IAAIF,EAAO,MACPgD,EAASjD,EAAQM,KAAK,KAAML,EAAM,GAEtC,OADW,IAAV6C,EAAcC,EAAevC,KAAK0C,GAA8B,IAAVJ,EAAcjC,EAAOL,KAAK2C,SAT3EC,GAS2G5C,KAwCjH,YACKuC,EAAiBH,KAChBG,EAAevC,KAClBuC,EAAevC,KAAK0C,GAAkB1C,UAAK,EAAQyC,GAEnDC,EAAiBH,GAGlB/C,EAAQC,EAAM,EAAGY,EAElB,IAlD0IL,UAAK,EAAQyC,GACjJhD,EACP,SAASkD,EAAiBvD,GACzBiB,EAASjB,EACT,EAAG,CASF,KADAmD,EAAiBH,MACOI,EAAeD,KAAoBA,EAAexC,EAEzE,YADAP,EAAQC,EAAM,EAAGY,GAGlB,GAAIkC,EAAevC,KAElB,YADAuC,EAAevC,KAAK0C,GAAkB1C,UAAK,EAAQyC,GAIhDD,EADJnC,EAASM,OAERN,EAASA,EAAON,EAEjB,QAASM,IAAWA,EAAOL,MAC5BK,EAAOL,KAAK2C,GAAkB3C,UAAK,EAAQyC,EAC3C,CACD,SAASC,EAAiBH,GACrBA,GACHlC,EAASM,MACKN,EAAOL,KACpBK,EAAOL,KAAK2C,GAAkB3C,UAAK,EAAQyC,GAE3CE,EAAiBtC,GAGlBb,EAAQC,EAAM,EAAGY,EAElB,CAYD,CA3TsCwC,CAAA,WAAA,QAAAC,EAAAb,KAAAc,IAAA,EAAA,EAAA,WAChBzB,OADVV,EACUU,EAAAA,MAAAA,QAAAA,QAAAA,EAAOA,UACvBC,IAAIE,EADY,SAEhBF,IAAIyB,WACJC,UAAUrC,IAHP1B,KAAAA,SAAAA,GJTK,IAAmBA,EAC1BgE,GIYArC,EAAYsC,UAAZtC,IAGUuC,QAAQ,QAAU,IAC9BvC,EAAYA,EAAUwC,QAAQ,OAAQ,MAIrB,YAAfzC,EAAM7B,MAAsC,IAAhB6B,EAAM0C,OACpCtB,EAAiBuB,EAAO,QAAC3C,EAAMjC,SAAS,GAAGS,OAC3CyC,EAAmBG,GAAkB,CACnCwB,MAAO5C,EAAMjC,SAAS,GAAGS,MACzB+B,QAAS,KAEa,cAAfP,EAAM7B,MAAwBiD,GACjClB,EAAMe,EAAmBG,GJ5BH9C,EI8BL2B,EJ7BrBqC,EAAQ3E,EAAkBK,IAAI,SAAC6E,GACnC,OAAOC,EAAAA,QAAQxE,EAAMuE,EACtB,GI2BS1C,EJ1BNmC,EAAME,SAAQ,IAAS,EACZO,EAAAA,eACXjC,EAAKA,MAACxC,EAAMX,EAAkB2E,EAAME,SAAQ,IAAQ,IAAIQ,MAjBlD,OAmBNC,SACUC,MAAM,KAAK,QIsBf9C,EHvCY+C,SAAU7E,GAChC,IAAMgE,EAAQ1E,EAAkBI,IAAI,SAAC6E,GACnC,OAAOC,UAAQxE,EAAMuE,EACtB,GACD,GAAIP,EAAME,SAAQ,IAAS,EAAG,CAC5B,IAAMpC,EAAO2C,EAAAA,eACXjC,EAAKA,MAACxC,EAAMV,EAAkB0E,EAAME,SAAQ,IAAQ,IAAIQ,MATlD,OAYR,OAAOI,EAAgBA,iBAAChD,EAZhB,MAY2B,QACpC,CACC,OAAO,IAEV,CG0BkB+C,CAAUlD,GACjBI,EC9CG,SAAuB/B,GACpC,IAAI+E,GAAU,EACRhD,EAAW,CACfiD,MAAO,EACPC,QAAS,GAGLC,EAAkB,IAAIC,OAAO,sBAC7BH,EAAQ,IAAIG,OAAO,aAEzB,GAAInF,EAAKgE,MAAMkB,GAAkB,CAC/BH,GAAU,EACV,IAAAK,EAAiBpF,EAAKgE,MAAMkB,GAAhBG,EACZtD,EAAAA,GAAAA,EAASiD,MAAQM,SADLD,EAAAA,IAEZtD,EAASkD,QAAUK,SAASD,EAC7B,MAAUrF,GAAAA,EAAKgE,MAAMgB,GAAQ,CAC5BD,GAAU,EACV,IAAc/E,EAAAA,EAAKgE,MAAMgB,GACzBjD,EAASiD,MAAQM,SAAjBvD,EAAAA,IACAA,EAASkD,QAAU,CACpB,CAED,OAAIF,EACKhD,MAIV,CDmBsBwD,CAAc5D,GAE3BE,IACFD,EAAIC,KAAOA,GAGTC,IACFF,EAAIE,KAAOA,GAGTC,IACFH,EAAIG,SAAWA,GAGjBH,EAAIK,QAAQuD,KAAK7D,IACO,SAAfD,EAAM7B,OACT+B,EAAMe,EAAmBG,IAC3B9C,KAAO2B,EACXC,EAAIpC,KAAOD,EAAUmC,GAAO+D,QACJ,SAAf/D,EAAM7B,KACH8C,EAAmBG,GAC3Bb,QAAQuD,KAAK9D,EAAMgE,MACC,SAAfhE,EAAM7B,OACT+B,EAAMe,EAAmBG,IAC3B6C,KAAOjE,EAAMiE,KACjB/D,EAAI5B,KAAO2B,GACa,YAAfD,EAAM7B,MAAsB6B,EAAM0C,MAAQ,EACvCzB,EAAmBG,GAC3Bb,QAAQuD,KAAK9D,EAAMjC,SAAS,GAAGS,QAEnC0F,QAAQC,IAAI,wBACZD,QAAQC,IAAInE,GAvDqB,EAyDpC"}
|
package/src/parse.js
CHANGED
|
@@ -27,7 +27,12 @@ export default async function parseMD(body) {
|
|
|
27
27
|
.use(remarkGfm)
|
|
28
28
|
.use(remarkStringify)
|
|
29
29
|
.stringify(token)
|
|
30
|
-
|
|
30
|
+
let cleanText = stripFinalNewline(text)
|
|
31
|
+
|
|
32
|
+
// remove `\\_`
|
|
33
|
+
if (cleanText.indexOf('\\_') > -1) {
|
|
34
|
+
cleanText = cleanText.replace(/\\_/g, '_')
|
|
35
|
+
}
|
|
31
36
|
|
|
32
37
|
// issue forms uses h3 as a heading
|
|
33
38
|
if (token.type === 'heading' && token.depth === 3) {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"parent":"3fabb32d-040c-4633-9bb7-f2949a4f083b","pid":1760,"argv":["/usr/local/bin/node","/home/runner/work/issue-forms-body-parser/issue-forms-body-parser/test/parse-issue.test.js"],"execArgv":["--experimental-json-modules"],"cwd":"/home/runner/work/issue-forms-body-parser/issue-forms-body-parser","time":1655987615801,"ppid":1749,"coverageFilename":"/home/runner/work/issue-forms-body-parser/issue-forms-body-parser/.nyc_output/aa46d5ef-875b-478e-b87f-8633377748e7.json","externalId":"test/parse-issue.test.js","uuid":"aa46d5ef-875b-478e-b87f-8633377748e7","files":[]}
|