@jsonic/multisource 0.0.8 → 0.3.0

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.
@@ -1,13 +1,44 @@
1
- import { Plugin, Context } from 'jsonic';
2
- import { makeMemResolver } from './resolver/mem';
3
- import { makeFileResolver } from './resolver/file';
4
- interface Resolution {
5
- path: string;
6
- full: string;
7
- base: string;
8
- src?: string;
1
+ import { Jsonic, Context, Rule, Plugin } from 'jsonic';
2
+ interface MultiSourceMeta {
3
+ path?: string;
4
+ deps?: DependencyMap;
9
5
  }
10
- declare type Resolver = (path: string, ctx?: Context) => Resolution;
6
+ declare const NONE = "";
7
+ declare type MultiSourceOptions = {
8
+ resolver: Resolver;
9
+ path?: string;
10
+ markchar?: string;
11
+ processor?: {
12
+ [kind: string]: Processor;
13
+ };
14
+ implictExt?: [];
15
+ };
16
+ declare type PathSpec = {
17
+ kind: string;
18
+ path?: string;
19
+ full?: string;
20
+ base?: string;
21
+ abs: boolean;
22
+ };
23
+ declare type Resolution = PathSpec & {
24
+ src?: string;
25
+ val?: any;
26
+ found: boolean;
27
+ };
28
+ declare type Resolver = (spec: PathSpec, popts: MultiSourceOptions, rule: Rule, ctx: Context, jsonic: Jsonic) => Resolution;
29
+ declare type Processor = (res: Resolution, popts: MultiSourceOptions, rule: Rule, ctx: Context, jsonic: Jsonic) => void;
30
+ declare type Dependency = {
31
+ tar: string | typeof TOP;
32
+ src: string;
33
+ wen: number;
34
+ };
35
+ declare type DependencyMap = {
36
+ [tar_full_path: string]: {
37
+ [src_full_path: string]: Dependency;
38
+ };
39
+ };
11
40
  declare const TOP: unique symbol;
12
- declare let MultiSource: Plugin;
13
- export { MultiSource, Resolver, Resolution, TOP, Context, makeFileResolver, makeMemResolver, };
41
+ declare const MultiSource: Plugin;
42
+ declare function resolvePathSpec(popts: MultiSourceOptions, ctx: Context, spec: any, resolvefolder: (path: string) => string): PathSpec;
43
+ export type { Resolver, Resolution, Processor, MultiSourceOptions, Dependency, DependencyMap, MultiSourceMeta, PathSpec, };
44
+ export { MultiSource, resolvePathSpec, NONE, TOP, };
@@ -1,84 +1,104 @@
1
+ "use strict";
1
2
  /* Copyright (c) 2021 Richard Rodger, MIT License */
2
- /* $lab:coverage:off$ */
3
- 'use strict';
4
3
  Object.defineProperty(exports, "__esModule", { value: true });
5
- exports.makeMemResolver = exports.makeFileResolver = exports.TOP = exports.MultiSource = void 0;
6
- const jsonic_1 = require("jsonic");
7
- // TODO: get package sub file refs working with ts
8
- const mem_1 = require("./resolver/mem");
9
- Object.defineProperty(exports, "makeMemResolver", { enumerable: true, get: function () { return mem_1.makeMemResolver; } });
10
- const file_1 = require("./resolver/file");
11
- Object.defineProperty(exports, "makeFileResolver", { enumerable: true, get: function () { return file_1.makeFileResolver; } });
12
- //import { Json } from './json'
13
- //import { Csv } from './csv'
14
- /* $lab:coverage:on$ */
15
- // TODO: .jsonic suffix optional
16
- // TODO: jsonic-cli should provide basepath
17
- // TODO: auto load index.jsonic, index.<folder-name>.jsonic
18
- let DEFAULTS = {
19
- markchar: '@',
20
- };
4
+ exports.TOP = exports.NONE = exports.resolvePathSpec = exports.MultiSource = void 0;
5
+ const directive_1 = require("@jsonic/directive");
6
+ const jsonic_1 = require("./processor/jsonic");
7
+ const js_1 = require("./processor/js");
8
+ // Unknown source reference file extension.
9
+ const NONE = '';
10
+ exports.NONE = NONE;
11
+ // The top of the dependence tree.
21
12
  const TOP = Symbol('TOP');
22
13
  exports.TOP = TOP;
23
- let MultiSource = function multisource(jsonic) {
24
- let popts = jsonic_1.util.deep({}, DEFAULTS, jsonic.options.plugin.multisource);
25
- let markchar = popts.markchar;
26
- let resolver = popts.resolver;
27
- let tn = '#T<' + markchar + '>';
14
+ const MultiSource = (jsonic, popts) => {
15
+ const markchar = popts.markchar;
16
+ const resolver = popts.resolver;
17
+ const processor = popts.processor;
18
+ // Normalize implicit extensions to format `.name`.
19
+ const implictExt = (popts.implictExt || []);
20
+ for (let extI = 0; extI < implictExt.length; extI++) {
21
+ let ext = implictExt[extI];
22
+ implictExt[extI] = ext.startsWith('.') ? ext : '.' + ext;
23
+ }
28
24
  jsonic.options({
29
- token: {
30
- [tn]: { c: markchar }
31
- },
32
25
  error: {
33
- multifile_unsupported_file: 'unsupported file: $path'
26
+ multisource_not_found: 'source not found: $path',
34
27
  },
35
28
  hint: {
36
- multifile_unsupported_file: `This file type is not supported and cannot be parsed: $path.`,
29
+ // TODO: use $details for more explanation in error message.
30
+ // In particular to show resolved absolute path.
31
+ multisource_not_found: 'The source path $path was not found.',
37
32
  },
38
33
  });
39
- // These inherit previous plugins - they are not clean new instances.
40
- //let json = jsonic.make().use(Json, jsonic.options.plugin.json || {})
41
- //let csv = jsonic.make().use(Csv, jsonic.options.plugin.csv || {})
42
- let ST = jsonic.token.ST;
43
- let AT = jsonic.token(tn);
44
- jsonic.rule('val', (rs) => {
45
- rs.def.open.push({ s: [AT, ST] });
46
- let orig_bc = rs.def.bc;
47
- rs.def.bc = function (rule, ctx) {
48
- if (rule.open[0] && AT === rule.open[0].tin) {
49
- // console.log('MS res meta', ctx.meta)
50
- let val = undefined;
51
- let path = rule.open[1].val;
52
- let res = resolver(path, ctx);
53
- if (null != res.src) {
54
- let msmeta = ctx.meta.multisource || {};
55
- let meta = {
56
- ...ctx.meta,
57
- multisource: {
58
- ...msmeta,
59
- path: res.full
60
- }
61
- };
62
- // console.log('MSMETA path', path, res.full)
63
- val = jsonic(res.src, meta);
64
- if (msmeta.deps) {
65
- let depmap = msmeta.deps;
66
- let parent = (msmeta.path || TOP);
67
- if (null != parent) {
68
- (depmap[parent] = depmap[parent] || {})[res.full] = {
69
- tar: parent,
70
- src: res.full,
71
- wen: Date.now()
72
- };
73
- }
74
- }
75
- }
76
- rule.open[0].val = val;
34
+ // Define a directive that can load content from multiple sources.
35
+ let dopts = {
36
+ name: 'multisource',
37
+ open: markchar,
38
+ action: (rule, ctx) => {
39
+ var _a;
40
+ let spec = rule.child.node;
41
+ let res = resolver(spec, popts, rule, ctx, jsonic);
42
+ if (!res.found) {
43
+ return (_a = rule.parent) === null || _a === void 0 ? void 0 : _a.o0.bad('multisource_not_found', { ...res });
77
44
  }
78
- return orig_bc(...arguments);
79
- };
80
- return rs;
81
- });
45
+ res.kind = null == res.kind ? NONE : res.kind;
46
+ let proc = processor[res.kind] || processor[NONE];
47
+ proc(res, popts, rule, ctx, jsonic);
48
+ rule.node = res.val;
49
+ },
50
+ };
51
+ jsonic.use(directive_1.Directive, dopts);
82
52
  };
83
53
  exports.MultiSource = MultiSource;
54
+ // Convenience maker for Processors
55
+ function makeProcessor(process) {
56
+ return (res) => (res.val = process(res.src, res));
57
+ }
58
+ // Default is just to insert file contents as a string.
59
+ const defaultProcessor = makeProcessor((src) => src);
60
+ // TODO: use json plugin to get better error msgs.
61
+ const jsonProcessor = makeProcessor((src) => null == src ? undefined : JSON.parse(src));
62
+ const jsonicProcessor = (0, jsonic_1.makeJsonicProcessor)();
63
+ const jsProcessor = (0, js_1.makeJavaScriptProcessor)();
64
+ MultiSource.defaults = {
65
+ markchar: '@',
66
+ processor: {
67
+ [NONE]: defaultProcessor,
68
+ jsonic: jsonicProcessor,
69
+ jsc: jsonicProcessor,
70
+ json: jsonProcessor,
71
+ js: jsProcessor,
72
+ },
73
+ implictExt: ['jsonic', 'jsc', 'json', 'js'],
74
+ };
75
+ function resolvePathSpec(popts, ctx, spec, resolvefolder) {
76
+ var _a;
77
+ let msmeta = (_a = ctx.meta) === null || _a === void 0 ? void 0 : _a.multisource;
78
+ let base = resolvefolder(null == msmeta || null == msmeta.path ? popts.path : msmeta.path);
79
+ let path = 'string' === typeof spec
80
+ ? spec
81
+ : null != spec.path
82
+ ? '' + spec.path
83
+ : undefined;
84
+ let abs = !!((path === null || path === void 0 ? void 0 : path.startsWith('/')) || (path === null || path === void 0 ? void 0 : path.startsWith('\\')));
85
+ let full = abs
86
+ ? path
87
+ : null != path && '' != path
88
+ ? null != base && '' != base
89
+ ? base + '/' + path
90
+ : path
91
+ : undefined;
92
+ let kind = null == full ? NONE : (full.match(/\.([^.]*)$/) || [NONE, NONE])[1];
93
+ let res = {
94
+ kind,
95
+ path,
96
+ full,
97
+ base,
98
+ abs,
99
+ found: false,
100
+ };
101
+ return res;
102
+ }
103
+ exports.resolvePathSpec = resolvePathSpec;
84
104
  //# sourceMappingURL=multisource.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"multisource.js","sourceRoot":"","sources":["../multisource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"multisource.js","sourceRoot":"","sources":["../src/multisource.ts"],"names":[],"mappings":";AAAA,oDAAoD;;;AAGpD,iDAA+D;AAE/D,+CAAwD;AACxD,uCAAwD;AAUxD,2CAA2C;AAC3C,MAAM,IAAI,GAAG,EAAE,CAAA;AA8Lb,oBAAI;AApIN,kCAAkC;AAClC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;AAoIvB,kBAAG;AAlIL,MAAM,WAAW,GAAW,CAAC,MAAc,EAAE,KAAyB,EAAE,EAAE;IACxE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAkB,CAAA;IACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAoB,CAAA;IAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,SAA0C,CAAA;IAElE,mDAAmD;IACnD,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,CAAa,CAAA;IACvD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;QACnD,IAAI,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QAC1B,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAA;KACzD;IAED,MAAM,CAAC,OAAO,CAAC;QACb,KAAK,EAAE;YACL,qBAAqB,EAAE,yBAAyB;SACjD;QACD,IAAI,EAAE;YACJ,4DAA4D;YAC5D,gDAAgD;YAChD,qBAAqB,EAAE,sCAAsC;SAC9D;KACF,CAAC,CAAA;IAEF,kEAAkE;IAClE,IAAI,KAAK,GAAqB;QAC5B,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,CAAC,IAAU,EAAE,GAAY,EAAE,EAAE;;YACnC,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAA;YAE1B,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;YAClD,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;gBACd,OAAO,MAAA,IAAI,CAAC,MAAM,0CAAE,EAAE,CAAC,GAAG,CAAC,uBAAuB,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC,CAAA;aAChE;YAED,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAA;YAE7C,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,CAAA;YACjD,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;YAEnC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAA;QACrB,CAAC;KACF,CAAA;IACD,MAAM,CAAC,GAAG,CAAC,qBAAS,EAAE,KAAK,CAAC,CAAA;AAC9B,CAAC,CAAA;AAmFC,kCAAW;AAjFb,mCAAmC;AACnC,SAAS,aAAa,CAAC,OAA8C;IACnE,OAAO,CAAC,GAAe,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,GAAa,EAAE,GAAG,CAAC,CAAC,CAAA;AACzE,CAAC;AAED,uDAAuD;AACvD,MAAM,gBAAgB,GAAG,aAAa,CAAC,CAAC,GAAW,EAAE,EAAE,CAAC,GAAG,CAAC,CAAA;AAE5D,kDAAkD;AAClD,MAAM,aAAa,GAAG,aAAa,CAAC,CAAC,GAAW,EAAE,EAAE,CAClD,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAC1C,CAAA;AAED,MAAM,eAAe,GAAG,IAAA,4BAAmB,GAAE,CAAA;AAC7C,MAAM,WAAW,GAAG,IAAA,4BAAuB,GAAE,CAAA;AAE7C,WAAW,CAAC,QAAQ,GAAG;IACrB,QAAQ,EAAE,GAAG;IACb,SAAS,EAAE;QACT,CAAC,IAAI,CAAC,EAAE,gBAAgB;QACxB,MAAM,EAAE,eAAe;QACvB,GAAG,EAAE,eAAe;QACpB,IAAI,EAAE,aAAa;QACnB,EAAE,EAAE,WAAW;KAChB;IACD,UAAU,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC;CAC5C,CAAA;AAED,SAAS,eAAe,CACtB,KAAyB,EACzB,GAAY,EACZ,IAAS,EACT,aAAuC;;IAEvC,IAAI,MAAM,GAAG,MAAA,GAAG,CAAC,IAAI,0CAAE,WAAW,CAAA;IAClC,IAAI,IAAI,GAAG,aAAa,CACtB,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CACjE,CAAA;IAED,IAAI,IAAI,GACN,QAAQ,KAAK,OAAO,IAAI;QACtB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI;YACnB,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI;YAChB,CAAC,CAAC,SAAS,CAAA;IAEf,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,CAAC,GAAG,CAAC,MAAI,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,UAAU,CAAC,IAAI,CAAC,CAAA,CAAC,CAAA;IAC7D,IAAI,IAAI,GAAG,GAAG;QACZ,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI;YAC5B,CAAC,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,IAAI,IAAI;gBAC1B,CAAC,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI;gBACnB,CAAC,CAAC,IAAI;YACR,CAAC,CAAC,SAAS,CAAA;IAEb,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAE9E,IAAI,GAAG,GAAe;QACpB,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,IAAI;QACJ,GAAG;QACH,KAAK,EAAE,KAAK;KACb,CAAA;IAED,OAAO,GAAG,CAAA;AACZ,CAAC;AAeC,0CAAe"}
@@ -0,0 +1 @@
1
+ !function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).JsonicMultiSource=e()}}((function(){var define,module,exports,createModuleFactory=function(e){var t;return function(o){return t||e(t={exports:{},parent:o},t.exports),t.exports}},_$multisource_1=createModuleFactory((function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.TOP=t.NONE=t.resolvePathSpec=t.MultiSource=void 0;const o=_$jsonic_3({});t.NONE="";const n=Symbol("TOP");t.TOP=n;const l=(e,t)=>{const o=t.markchar,n=t.resolver,l=t.processor,i=t.implictExt||[];for(let s=0;s<i.length;s++){let e=i[s];i[s]=e.startsWith(".")?e:"."+e}e.options({error:{multisource_not_found:"source not found: $path"},hint:{multisource_not_found:"The source path $path was not found."}});let r={name:"multisource",open:o,action:(o,i)=>{var r;let s=o.child.node,u=n(s,t,o,i,e);if(!u.found)return null===(r=o.parent)||void 0===r?void 0:r.o0.bad("multisource_not_found",{...u});u.kind=null==u.kind?"":u.kind,(l[u.kind]||l[""])(u,t,o,i,e),o.node=u.val}};e.use(_$directiveMin_4.Directive,r)};function i(e){return t=>t.val=e(t.src,t)}t.MultiSource=l;const r=i(e=>e),s=i(e=>null==e?void 0:JSON.parse(e)),u=(0,o.makeJsonicProcessor)(),c=(0,_$js_2.makeJavaScriptProcessor)();l.defaults={markchar:"@",processor:{"":r,jsonic:u,jsc:u,json:s,js:c},implictExt:["jsonic","jsc","json","js"]},t.resolvePathSpec=function(e,t,o,n){var l;let i=null===(l=t.meta)||void 0===l?void 0:l.multisource,r=n(null==i||null==i.path?e.path:i.path),s="string"==typeof o?o:null!=o.path?""+o.path:void 0,u=!(!(null==s?void 0:s.startsWith("/"))&&!(null==s?void 0:s.startsWith("\\"))),c=u?s:null!=s&&""!=s?null!=r&&""!=r?r+"/"+s:s:void 0;return{kind:null==c?"":(c.match(/\.([^.]*)$/)||["",""])[1],path:s,full:c,base:r,abs:u,found:!1}}})),_$jsonic_3=createModuleFactory((function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.makeJsonicProcessor=void 0;const o=_$multisource_1({});t.makeJsonicProcessor=function(){return function(e,t,n,l,i){var r;if(null!=e.src&&null!=e.full){let t=(null===(r=l.meta)||void 0===r?void 0:r.multisource)||{},n={...l.meta||{},multisource:{...t,path:e.full}};if(e.val=i(e.src,n),t.deps){let n=t.deps,l=t.path||o.TOP;if(null!=l){let t={tar:l,src:e.full,wen:Date.now()};n[l]=n[l]||{},n[l][e.full]=t}}}}}})),_$directiveMin_4={exports:{}};(function(e){(function(){!function(t){"object"==typeof _$directiveMin_4.exports?_$directiveMin_4.exports=t():"function"==typeof define&&define.amd?define([],t):("undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:this).JsonicDirective=t()}((function(){var e={};Object.defineProperty(e,"__esModule",{value:!0}),e.Directive=void 0;const t=(e,t)=>{let o=("string"==typeof t.rules?t.rules.split(/\s*,\s*/):t.rules||[]).filter(e=>""!==e),n=t.name,l=t.open,i=t.close,r=t.action;if("string"==typeof r){let t=r;r=o=>o.node=e.util.prop(e.options,t)}let s={},u="#D_open_"+n,c="#D_close_"+n,a=e.fixed(l),d=null==i?null:e.fixed(i);if(null!=a)throw new Error("Directive open token already in use: "+l);s[u]=l,null==d&&null!=i&&(s[c]=i),e.options({fixed:{token:s},error:{[n+"_close"]:null==i?null:"directive "+n+' close "'+i+'" without open "'+l+'"'},hint:{[n+"_close"]:null==i?null:`\nThe ${n} directive must start with the characters "${l}" and end\nwith the characters "${i}". The end characters "${i}" may not\nappear without the start characters "${l}" appearing first:\n"${l}...${i}".\n`}});let f=e.token.CA;a=e.fixed(l),d=null==i?null:e.fixed(i),o.forEach(t=>{e.rule(t,e=>(e.open({s:[a],p:n,n:{dr:1}}),null!=i&&(e.open([{s:[d],c:{n:{dr:0}},e:(e,t)=>t.t0.bad(n+"_close")},{s:[d],b:1}]),e.close({s:[d],b:1})),e))}),e.rule(n,e=>e.clear().bo(e=>e.node={}).open([{p:"val",n:null==i?{}:{pk:-1,il:0}}]).bc((...e)=>r(...e)).close(null!=i?[{s:[d]},{s:[f,d]}]:[]))};return e.Directive=t,t.defaults={rules:"val,pair,elem"},e}))}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{}),_$directiveMin_4=_$directiveMin_4.exports;var _$js_2={};function makeJavaScriptProcessor(e){const t=t=>{t.val=evaluate(t,e)};return t.opts=e,t}function evaluate(res,opts){let out=void 0;if(!0!==(null==opts?void 0:opts.evalOnly))out=require(res.full);else{let exports=null,module={exports:exports};eval(res.src),out=module.exports}return out}return Object.defineProperty(_$js_2,"__esModule",{value:!0}),_$js_2.makeJavaScriptProcessor=void 0,_$js_2.makeJavaScriptProcessor=makeJavaScriptProcessor,_$multisource_1(),_$multisource_1}));
@@ -0,0 +1,5 @@
1
+ import { Processor } from '../multisource';
2
+ declare function makeJavaScriptProcessor(opts?: {
3
+ evalOnly?: boolean;
4
+ }): Processor;
5
+ export { makeJavaScriptProcessor };
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ /* Copyright (c) 2021 Richard Rodger, MIT License */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.makeJavaScriptProcessor = void 0;
5
+ function makeJavaScriptProcessor(opts) {
6
+ const JavaScriptProcessor = (res) => {
7
+ res.val = evaluate(res, opts);
8
+ };
9
+ JavaScriptProcessor.opts = opts;
10
+ return JavaScriptProcessor;
11
+ }
12
+ exports.makeJavaScriptProcessor = makeJavaScriptProcessor;
13
+ // TODO: too simplistic - handle more module cases
14
+ function evaluate(res, opts) {
15
+ let out = undefined;
16
+ if (true !== (opts === null || opts === void 0 ? void 0 : opts.evalOnly) && undefined !== typeof (require)) {
17
+ out = require(res.full);
18
+ }
19
+ else {
20
+ let exports = null;
21
+ let module = { exports };
22
+ eval(res.src);
23
+ out = module.exports;
24
+ }
25
+ return out;
26
+ }
27
+ //# sourceMappingURL=js.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"js.js","sourceRoot":"","sources":["../../src/processor/js.ts"],"names":[],"mappings":";AAAA,oDAAoD;;;AASpD,SAAS,uBAAuB,CAAC,IAEhC;IAEC,MAAM,mBAAmB,GAAG,CAC1B,GAAe,EACf,EAAE;QACF,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAC/B,CAAC,CAAA;IAED,mBAAmB,CAAC,IAAI,GAAG,IAAI,CAAA;IAE/B,OAAO,mBAAmB,CAAA;AAC5B,CAAC;AAkBC,0DAAuB;AAhBzB,kDAAkD;AAClD,SAAS,QAAQ,CAAC,GAAe,EAAE,IAAU;IAC3C,IAAI,GAAG,GAAG,SAAS,CAAA;IACnB,IAAI,IAAI,MAAK,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,QAAQ,CAAA,IAAI,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,EAAE;QAC7D,GAAG,GAAG,OAAO,CAAE,GAAG,CAAC,IAAe,CAAC,CAAA;KACpC;SACI;QACH,IAAI,OAAO,GAAG,IAAI,CAAA;QAClB,IAAI,MAAM,GAAG,EAAE,OAAO,EAAE,CAAA;QACxB,IAAI,CAAE,GAAG,CAAC,GAAc,CAAC,CAAA;QACzB,GAAG,GAAG,MAAM,CAAC,OAAO,CAAA;KACrB;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Processor } from '../multisource';
2
+ declare function makeJsonicProcessor(): Processor;
3
+ export { makeJsonicProcessor };
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ /* Copyright (c) 2021 Richard Rodger, MIT License */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.makeJsonicProcessor = void 0;
5
+ const multisource_1 = require("../multisource");
6
+ function makeJsonicProcessor() {
7
+ return function JsonicProcessor(res, _popts, _rule, ctx, jsonic) {
8
+ var _a;
9
+ if (null != res.src && null != res.full) {
10
+ // Pass down any meta info.
11
+ let msmeta = ((_a = ctx.meta) === null || _a === void 0 ? void 0 : _a.multisource) || {};
12
+ let meta = {
13
+ ...(ctx.meta || {}),
14
+ multisource: {
15
+ ...msmeta,
16
+ path: res.full
17
+ }
18
+ };
19
+ // console.log('PM', meta, res)
20
+ res.val = jsonic(res.src, meta);
21
+ // Build dependency tree branch.
22
+ if (msmeta.deps) {
23
+ let depmap = msmeta.deps;
24
+ let parent = (msmeta.path || multisource_1.TOP);
25
+ if (null != parent) {
26
+ let dep = {
27
+ tar: parent,
28
+ src: res.full,
29
+ wen: Date.now()
30
+ };
31
+ depmap[parent] = depmap[parent] || {};
32
+ depmap[parent][res.full] = dep;
33
+ }
34
+ }
35
+ }
36
+ };
37
+ }
38
+ exports.makeJsonicProcessor = makeJsonicProcessor;
39
+ //# sourceMappingURL=jsonic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonic.js","sourceRoot":"","sources":["../../src/processor/jsonic.ts"],"names":[],"mappings":";AAAA,oDAAoD;;;AAKpD,gDAQuB;AAGvB,SAAS,mBAAmB;IAE1B,OAAO,SAAS,eAAe,CAC7B,GAAe,EACf,MAA0B,EAC1B,KAAW,EACX,GAAY,EACZ,MAAc;;QAEd,IAAI,IAAI,IAAI,GAAG,CAAC,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE;YAEvC,2BAA2B;YAC3B,IAAI,MAAM,GAAoB,CAAA,MAAA,GAAG,CAAC,IAAI,0CAAE,WAAW,KAAI,EAAE,CAAA;YACzD,IAAI,IAAI,GAAG;gBACT,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;gBACnB,WAAW,EAAE;oBACX,GAAG,MAAM;oBACT,IAAI,EAAE,GAAG,CAAC,IAAI;iBACf;aACF,CAAA;YAED,+BAA+B;YAC/B,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;YAE/B,gCAAgC;YAChC,IAAI,MAAM,CAAC,IAAI,EAAE;gBACf,IAAI,MAAM,GAAI,MAAM,CAAC,IAAsB,CAAA;gBAC3C,IAAI,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,iBAAG,CAAW,CAAA;gBAC3C,IAAI,IAAI,IAAI,MAAM,EAAE;oBAClB,IAAI,GAAG,GAAe;wBACpB,GAAG,EAAE,MAAM;wBACX,GAAG,EAAE,GAAG,CAAC,IAAI;wBACb,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE;qBAChB,CAAA;oBACD,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;oBACrC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAA;iBAC/B;aACF;SACF;IACH,CAAC,CAAA;AACH,CAAC;AAKC,kDAAmB"}
@@ -1,3 +1,4 @@
1
1
  import { Resolver } from '../multisource';
2
- declare function makeFileResolver(): Resolver;
3
- export { makeFileResolver };
2
+ declare type PathFinder = (spec: any) => string;
3
+ declare function makeFileResolver(pathfinder?: PathFinder): Resolver;
4
+ export { makeFileResolver, };
@@ -6,31 +6,56 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.makeFileResolver = void 0;
7
7
  const fs_1 = __importDefault(require("fs"));
8
8
  const path_1 = __importDefault(require("path"));
9
- function makeFileResolver() {
10
- return function FileResolver(path, ctx) {
11
- let msmeta = ctx && ctx.meta && ctx.meta.multisource || {};
12
- let popts = ctx && ctx.opts && ctx.opts &&
13
- ctx.opts.plugin && ctx.opts.plugin.multisource || {};
14
- let basefile = null == msmeta.path ?
15
- null == popts.path ?
16
- path : popts.path : msmeta.path;
17
- let fstats = fs_1.default.statSync(basefile);
18
- let basepath = basefile;
19
- if (fstats.isFile()) {
20
- let basedesc = path_1.default.parse(basefile);
21
- basepath = basedesc.dir;
9
+ const multisource_1 = require("../multisource");
10
+ const mem_1 = require("./mem");
11
+ function makeFileResolver(pathfinder) {
12
+ return function FileResolver(spec, popts, _rule, ctx) {
13
+ let foundSpec = pathfinder ? pathfinder(spec) : spec;
14
+ let ps = (0, multisource_1.resolvePathSpec)(popts, ctx, foundSpec, resolvefolder);
15
+ let src = undefined;
16
+ if (null != ps.full) {
17
+ ps.full = path_1.default.resolve(ps.full);
18
+ src = load(ps.full);
19
+ if (null == src && multisource_1.NONE === ps.kind) {
20
+ let potentials = (0, mem_1.buildPotentials)(ps, popts, (...s) => path_1.default.resolve(s.reduce((a, p) => path_1.default.join(a, p))));
21
+ for (let path of potentials) {
22
+ if (null != (src = load(path))) {
23
+ ps.full = path;
24
+ ps.kind = (path.match(/\.([^.]*)$/) || [multisource_1.NONE, multisource_1.NONE])[1];
25
+ break;
26
+ }
27
+ }
28
+ }
22
29
  }
23
- let isabsolute = path_1.default.isAbsolute(path);
24
- let fullpath = isabsolute ? path :
25
- (null == basepath ? path : path_1.default.resolve(basepath, path));
26
- let src = fs_1.default.readFileSync(fullpath).toString();
27
- return {
28
- path: path,
29
- full: fullpath,
30
- base: basepath,
30
+ let res = {
31
+ ...ps,
31
32
  src,
33
+ found: null != src
32
34
  };
35
+ return res;
33
36
  };
34
37
  }
35
38
  exports.makeFileResolver = makeFileResolver;
39
+ function resolvefolder(path) {
40
+ if ('string' !== typeof path) {
41
+ return path;
42
+ }
43
+ let folder = path;
44
+ let pathstats = fs_1.default.statSync(path);
45
+ if (pathstats.isFile()) {
46
+ let pathdesc = path_1.default.parse(path);
47
+ folder = pathdesc.dir;
48
+ }
49
+ return folder;
50
+ }
51
+ // TODO: in multisource.ts, generate an error token if cannot resolve
52
+ function load(path) {
53
+ try {
54
+ return fs_1.default.readFileSync(path).toString();
55
+ }
56
+ catch (e) {
57
+ // NOTE: don't need this, as in all cases, we consider failed
58
+ // reads to indicate non-existence.
59
+ }
60
+ }
36
61
  //# sourceMappingURL=file.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"file.js","sourceRoot":"","sources":["../../resolver/file.ts"],"names":[],"mappings":";;;;;;AACA,4CAAmB;AACnB,gDAAuB;AAQvB,SAAS,gBAAgB;IAEvB,OAAO,SAAS,YAAY,CAAC,IAAY,EAAE,GAAa;QACtD,IAAI,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAA;QAC1D,IAAI,KAAK,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI;YACrC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAA;QAEtD,IAAI,QAAQ,GACV,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;YACnB,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;gBAClB,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAA;QAErC,IAAI,MAAM,GAAG,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAClC,IAAI,QAAQ,GAAG,QAAQ,CAAA;QAEvB,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE;YACnB,IAAI,QAAQ,GAAG,cAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;YACnC,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAA;SACxB;QAED,IAAI,UAAU,GAAG,cAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACtC,IAAI,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAChC,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,cAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAA;QAE1D,IAAI,GAAG,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAA;QAE9C,OAAO;YACL,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,GAAG;SACJ,CAAA;IACH,CAAC,CAAA;AACH,CAAC;AAIC,4CAAgB"}
1
+ {"version":3,"file":"file.js","sourceRoot":"","sources":["../../src/resolver/file.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAmB;AACnB,gDAAuB;AAIvB,gDAMuB;AAGvB,+BAEc;AAKd,SAAS,gBAAgB,CAAC,UAAuB;IAE/C,OAAO,SAAS,YAAY,CAC1B,IAAS,EACT,KAAyB,EACzB,KAAW,EACX,GAAY;QAEZ,IAAI,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAEpD,IAAI,EAAE,GAAG,IAAA,6BAAe,EAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,aAAa,CAAC,CAAA;QAC9D,IAAI,GAAG,GAAG,SAAS,CAAA;QAEnB,IAAI,IAAI,IAAI,EAAE,CAAC,IAAI,EAAE;YACnB,EAAE,CAAC,IAAI,GAAG,cAAI,CAAC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;YAE/B,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;YAEnB,IAAI,IAAI,IAAI,GAAG,IAAI,kBAAI,KAAK,EAAE,CAAC,IAAI,EAAE;gBACnC,IAAI,UAAU,GACZ,IAAA,qBAAe,EAAC,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAClC,cAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,cAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBAEtD,KAAK,IAAI,IAAI,IAAI,UAAU,EAAE;oBAC3B,IAAI,IAAI,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;wBAC9B,EAAE,CAAC,IAAI,GAAG,IAAI,CAAA;wBACd,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAI,EAAE,kBAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;wBACvD,MAAK;qBACN;iBACF;aACF;SACF;QAED,IAAI,GAAG,GAAe;YACpB,GAAG,EAAE;YACL,GAAG;YACH,KAAK,EAAE,IAAI,IAAI,GAAG;SACnB,CAAA;QAED,OAAO,GAAG,CAAA;IACZ,CAAC,CAAA;AACH,CAAC;AAgCC,4CAAgB;AA9BlB,SAAS,aAAa,CAAC,IAAY;IACjC,IAAI,QAAQ,KAAK,OAAO,IAAI,EAAE;QAC5B,OAAO,IAAI,CAAA;KACZ;IAED,IAAI,MAAM,GAAG,IAAI,CAAA;IACjB,IAAI,SAAS,GAAG,YAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAEjC,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE;QACtB,IAAI,QAAQ,GAAG,cAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC/B,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAA;KACtB;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAGD,qEAAqE;AACrE,SAAS,IAAI,CAAC,IAAY;IACxB,IAAI;QACF,OAAO,YAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAA;KACxC;IACD,OAAO,CAAC,EAAE;QACR,6DAA6D;QAC7D,mCAAmC;KACpC;AACH,CAAC"}
@@ -1,5 +1,6 @@
1
- import { Resolver } from '../multisource';
2
- declare function makeMemResolver(map: {
1
+ import { MultiSourceOptions, Resolver, PathSpec } from '../multisource';
2
+ declare function makeMemResolver(filemap: {
3
3
  [fullpath: string]: string;
4
4
  }): Resolver;
5
- export { makeMemResolver };
5
+ declare function buildPotentials(ps: PathSpec, popts: MultiSourceOptions, pathjoin: (...parts: string[]) => string): string[];
6
+ export { buildPotentials, makeMemResolver, };
@@ -1,23 +1,71 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.makeMemResolver = void 0;
4
- function makeMemResolver(map) {
5
- return function MemResolver(path, ctx) {
6
- let msmeta = ctx && ctx.meta && ctx.meta.multisource || {};
7
- let popts = ctx && ctx.opts && ctx.opts &&
8
- ctx.opts.plugin && ctx.opts.plugin.multisource || {};
9
- let basepath = null == msmeta.path ? popts.path : msmeta.path;
10
- let isabsolute = path.startsWith('/');
11
- let fullpath = isabsolute ? path : (null == basepath ? '' : basepath) + '/' + path;
12
- //console.log('MEM', path, basepath, isabsolute, fullpath)
13
- let src = map[fullpath];
14
- return {
15
- path: path,
16
- full: fullpath,
17
- base: basepath,
3
+ exports.makeMemResolver = exports.buildPotentials = void 0;
4
+ const multisource_1 = require("../multisource");
5
+ function makeMemResolver(filemap) {
6
+ return function MemResolver(spec, popts, _rule, ctx) {
7
+ let ps = (0, multisource_1.resolvePathSpec)(popts, ctx, spec, makeresolvefolder(filemap));
8
+ let src = undefined;
9
+ if (null != ps.full) {
10
+ src = filemap[ps.full];
11
+ if (null == src && multisource_1.NONE === ps.kind) {
12
+ let potentials = buildPotentials(ps, popts, (...s) => s.reduce((a, p) => a + '/' + p));
13
+ for (let path of potentials) {
14
+ if (null != (src = filemap[path])) {
15
+ ps.full = path;
16
+ ps.kind = (path.match(/\.([^.]*)$/) || [multisource_1.NONE, multisource_1.NONE])[1];
17
+ break;
18
+ }
19
+ }
20
+ }
21
+ }
22
+ let res = {
23
+ ...ps,
18
24
  src,
25
+ found: null != src
19
26
  };
27
+ return res;
20
28
  };
21
29
  }
22
30
  exports.makeMemResolver = makeMemResolver;
31
+ function makeresolvefolder(filemap) {
32
+ return function resolvefolder(path) {
33
+ let folder = path;
34
+ if (filemap[path]) {
35
+ folder = (path
36
+ .replace(/[\\\/]+$/, '')
37
+ .match(/[\\\/]+([^\\\/]+)$/) || ['', ''])[1];
38
+ // console.log('PF', path, folder)
39
+ }
40
+ // console.log('RF', folder)
41
+ return folder;
42
+ };
43
+ }
44
+ function buildPotentials(ps, popts, pathjoin) {
45
+ let full = ps.full;
46
+ let potentials = [];
47
+ let implictExt = popts.implictExt || [];
48
+ // Implicit extensions.
49
+ for (let ext of implictExt) {
50
+ potentials.push(full + ext);
51
+ }
52
+ // Folder index file.
53
+ for (let ext of implictExt) {
54
+ potentials.push(pathjoin(full, 'index' + ext));
55
+ }
56
+ // Folder index file (includes folder name).
57
+ if (null != ps.path) {
58
+ let folder = (ps.path
59
+ .replace(/[\\\/]+$/, '')
60
+ .match(/[^\\\/]+$/) || [])[0];
61
+ if (null != folder) {
62
+ for (let ext of implictExt) {
63
+ potentials.push(pathjoin(full, 'index.' + folder + ext));
64
+ }
65
+ }
66
+ }
67
+ // console.log(potentials)
68
+ return potentials;
69
+ }
70
+ exports.buildPotentials = buildPotentials;
23
71
  //# sourceMappingURL=mem.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mem.js","sourceRoot":"","sources":["../../resolver/mem.ts"],"names":[],"mappings":";;;AAMA,SAAS,eAAe,CAAC,GAAmC;IAE1D,OAAO,SAAS,WAAW,CAAC,IAAY,EAAE,GAAa;QACrD,IAAI,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAA;QAC1D,IAAI,KAAK,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI;YACrC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAA;QAEtD,IAAI,QAAQ,GAAG,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAA;QAE7D,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;QACrC,IAAI,QAAQ,GACV,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,IAAI,CAAA;QAErE,0DAA0D;QAE1D,IAAI,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAA;QAEvB,OAAO;YACL,IAAI,EAAE,IAAI;YACV,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,GAAG;SACJ,CAAA;IACH,CAAC,CAAA;AACH,CAAC;AAIC,0CAAe"}
1
+ {"version":3,"file":"mem.js","sourceRoot":"","sources":["../../src/resolver/mem.ts"],"names":[],"mappings":"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"}
package/jest.config.js ADDED
@@ -0,0 +1,9 @@
1
+ /** @type {import('@ts-jest/dist/types').InitialOptionsTsJest} */
2
+ module.exports = {
3
+ transform: {
4
+ "^.+\\.tsx?$": "esbuild-jest"
5
+ },
6
+ testEnvironment: 'node',
7
+ testMatch: ['**/test/**/*.test.ts'],
8
+ watchPathIgnorePatterns: ['.*.js$'],
9
+ }