docs: function(token, this_, args, scope){
          var arg0 = resolveString(scope, args[0]);
  
          if (typeof arg0 != 'string')
          {
            if (this.file.namespace != 'basis')
              flow.warn({
                file: this.file.relpath,
                message: 'Unresolved basis.require: ' + at.translate(token)
              });
  
            return;
          }
  
          token.loc = this.file.location(token.loc);
          token.replaceFor_ = 'basis.require';
  
          //fconsole.log('requireNamespace', token);
          if (!/[^a-z0-9_\.]/i.test(arg0) && path.extname(arg0) != '.js')
          {
            var namespace = args[0].value;
            var parts = namespace.split(/\./);
            var root = parts[0];
            var rootFile = flow.js.rootNSFile[root];
            var nsToken = getNamespace(namespace);
            var newFile;
            var file = this.file;
  
            if (root == namespace)
            {
              if (!rootFile)
              {
                rootFile = flow.files.add({
                  initiator: {
                    file: this.file,
                    loc: token.loc,
                    token: at.translate(token)
                  },
                  filename:
                    flow.js.rootFilename[root] ||
                    flow.files.resolve(root + '.js', flow.js.rootBaseURI[root]),
                  nsToken: nsToken,
                  package: flow.js.rootNSFile.basis.package,
                  namespace: root
                });
                rootFile.isResource = true;
                token.file = rootFile;
                flow.js.fn2ns[rootFile.jsRef] = root;
                flow.js.rootNSFile[root] = rootFile;
              }
  
              newFile = rootFile;
            }
            else
            {
              newFile = flow.files.add({
                initiator: {
                  file: this.file,
                  loc: token.loc,
                  token: at.translate(token)
                },
                filename: basisResolveNSFilename
                  ? basisResolveNSFilename(namespace)
                  : path.resolve(
                      path.dirname(flow.js.rootFilename[root] || flow.files.resolve(root + '.js', flow.js.rootBaseURI[root])),
                      parts.join('/') + '.js'
                    ),
                nsToken: nsToken
              });
              newFile.isResource = true;
              newFile.namespace = namespace;
  
              flow.js.fn2ns[newFile.jsRef] = namespace;
              token.file = newFile;
              //newFile.package = root;
            }
  
            //token.file = newFile;
  
            createScope(newFile, flow, nsToken);
  
            file.link(newFile, token);
            file.deps.push(newFile);
  
            token.resourceRef = newFile;
            flow.js.resources.push(token);
  
            fconsole.incDeep(2);
            processFile(newFile, flow);
            fconsole.decDeep(2);
  
            token.ref_ = newFile.jsScope.get('module').token.obj.exports;
            token.obj = token.ref_.obj;
          }
          else
          {
            var arg1 = args[1] && args[1].type == 'Literal' ? args[1].value : '';  // TODO: check it
            var filename = basisResolveURI // since 1.4
              ? basisResolveURI(arg0, arg1 || flow.indexFile.baseURI, 'basis.require(\'{url}\')')
              : resolveToBase(arg0, arg1 || flow.indexFile.baseURI);
            var file = this.file;
  
            if (!path.extname(filename))
              filename += '.js';
  
            var newFile = flow.files.add({
              initiator: {
                file: this.file,
                loc: token.loc,
                token: at.translate(token)
              },
              filename: filename,
              jsRefCount: 0
            });
  
            newFile.isResource = true;
            newFile.jsRefCount++;
  
            file.link(newFile, token);
            file.resources.push(newFile);
  
            token.resourceRef = newFile;
            flow.js.resources.push(token);
  
            if (newFile.type == 'script')
            {
              createScope(newFile, flow);
  
              fconsole.incDeep(2);
              processFile(newFile, flow);
              fconsole.decDeep(2);
  
              token.ref_ = newFile.jsScope.get('module').token.obj.exports;
              token.obj = token.ref_.obj;
            }
            else
            {
              token.ref_ = utils.createLiteral(newFile.content);
            }
          }
        }